Brew

**無線二進位執行環境**（Binary Runtime Environment for Wireless，簡稱 **BREW**）為 2001 年美國高通（Qualcomm）公司所設計提出的 3G 系統最佳平台解決方案，可支援 cdmaOne／CDMA2000／GSM／GPRS／UMTS／WCDMA，技術上橫跨電信、軟體開發、手機廠等三大領域。在程式語言支援方面，BREW 可讓使用 C/C++ 語言開發的應用擁有更好的運行效能，同時支援其他開發語言包括 Java、XML 和 Flash 等。目前有美國 Verizon Wireless、中國電信、日本 KDDI、南韓 KTF、泰國 Hutchison cat、澳洲 Telstra、墨西哥 Iusacell、印度 Tata、巴西 VIVO、阿根廷 Movicom、以色列 Pelephone、委內瑞拉的 Telcel、烏拉圭的 Movicom…… 等數十家電信業者採用。

## 開發技術

BREW 的執行環境稱為 BREW AEE（Application Execution Environment），這是一個中間層的應用，具有高效、低成本、可延伸性。一般所見到的 BREW 例子都是用 C 寫的，不過 BREW 開發是完全支援 C++ 語言的，2003 年宣布支援 Java 語言。2002 年 7 月份於 San Diego 舉行的 BREW 開發商大會上，IBM 和 Insignia 展示了 BREW 環境下的 JAVA virtual machine（JVM）。HP 也將其 MicrochaiVM 平台轉向了 BREW。IBM 將在 WebSphere Studio Device Developer 產品中提供一個 BREW 開發套件。

BREW SDK 至今已發行多套版本，1.0, 1.1, 2.0, 2.1, 3.1, 4.0.4，並且向下相容（backward compatible），目前最新的版本為 4.0.4 版。SDK 是 BREW 所提供的是一組 API 函式集合，OEM 開發廠商可以利用 BREW 建立用於無線裝置（現是無線電話）的應用軟體。

對手機領域來說，BREW 是一種輕型客戶端（thin client），大約佔用 150K 左右的記憶體空間，介於應用程式軟體和底層系統軟體（Application Specific Integrated Circuit，ASIC）之間。因此，開發廠商可以於不相關裝置電路（device's chipset）或無線介面（air interface）的情況下，獨立開發 BREW 應用程式。CDMA（Code Division Multiple Access）chipsets 是 QUALCOMM 公司的專利（specialty），但是 BREW 一樣可以執行在使用其他無線介面標準的手機上。

BREW SDK 是免費提供的，但開發者仍須安裝 Microsoft Visual C++ 6.0 或其後續版本 Visual C++.NET，方可使用由 SDK 提供的 BREW Simulator 來開發和測試應用程式。BREW Simulator 是一支 Windows 程式，可以類比電話上的 AEE（Application Execution Environment）。應用程式可以 DLL 的形式執行於 BREW Simulator 中。因為 DLL 只能用於 Windows 平台，BREW Simulator 可以執行這個 DLL。目前市面上的手機大部分採用 ARM kernel，非關於 DLL 檔。

BREW 的應用程式執行環境（AEE）是一個精巧的軟體介面層。裝置廠商將它整合在各自的軟體中，以支援 BREW API 和執行環境。在一個新終端裝置中提供 AEE 要求裝置廠商只要移植 AEE 即可。此外，BREW Emulator 中提供了一個 AEE 的 Windows port，所以 BREW Emulator 可以執行針對 Windows 的小程式。由於 AEE 佔用的隨機記憶體和快閃記憶體極小，適用於低階（low end）主流機型。

除了向應用程式提供 BREW API 服務，AEE 同時管理著應用程式的執行，及時回應使用者和一些緊急事件，比如說，一個正在執行的 BREW 應用當有來電呼入時，可以自動立即暫停（suspend）；並在通話完畢之後，再自動恢復（resume）工作。

在 BREW 環境中，Module 是基本的組織單位。發展一個 BREW 應用程式可以從三個部份來解讀，Module, Applet，以及 Extension。一個 Module 可以包含一個以上的 Applet，也可以包含一個以上的 Extension，如下圖所示，Module A 擁有一個 Applet A, Applet A 再參照 Extension X；而 Module X 僅擁有一個 Extension；至於 Module B 則擁有兩個 Applets，以及一個 Extension。有些 Module 是出廠時的 code space（OEM Module image），也有 Module 是通過下載方式（download）儲存於檔案系統；這些 Module 依性質可區分為靜態（static）和動態（dynamic），主要包括：dynamic Module（Applet），static Module（Applet）和 dynamic extension class（Module）。

## BREW 的優點

下列是 BREW 與 J2ME 的比較。brew 有絕對的實力來對抗 j2me，從遊戲軟體的開發角度來看，BREW 有許多的優點。

* The BREW API 在支援電話上遠超過 J2ME API。
* API 較 J2ME 簡潔有力。
* 圖形開發更容易，BREW 2.0 可以直接存取螢幕緩衝區。
* J2ME phones 經常有二進位碼大小的限制 (128KB is common)。BREW 目前無此限制。
* BREW 是更底層的技術，加上和 CDMA 的完美結合，使 BREW 擁有了更快的反應速度。
* BREW 應用程式可以是物件導向程式設計（Object-oriented programming）。在 J2ME 裡過多的類別會造成檔案大小的負擔，一般被鼓勵以 C 語言的撰寫方式。此外，由於非原始狀態的型別（non-primitive types）使得 J2ME 的陣列看起來更像類別（classes）。基於這個理由，J2ME 仍常使用原始型態（primitive types）的平行陣列。

BREW 的開發優勢

1. 對於運營商而言，BREW 技術與網路完全無關。這意味著它可以完全平等地應用於所有領先的無線技術之中。
2. 對於裝置製造商而言，BREW 應用執行環境可以同行動裝置快閃記憶體和 RAM 中的處理晶片緊密整合，從而實現廣泛適用性、軟體開發變得更加順暢，效率得到提升。
3. 對於應用開發商而言，BREW 執行平台基於普及型程式語言 C/C＋＋，這種語言擁有龐大的使用者群，他們只需掌握很少的行動電話知識即可實現 BREW 支援。
4. 3G 平台 EVDO 的推廣也為 BREW 帶來了新的機會.
5. BREW 平台提供了一系列規範的服務介面，簡化和規範了基於 BREW 的應用開發。
6. BREW 平台版本也在不斷的演進 1.x->2.x->3.x->4.x->BMP
7. BREW 平台作為一個承上啟下的關鍵中間層，對上層 BREW 應用封鎖了底層提供服務的平台差異。

## BREW 的缺點

相較於 J2ME 之下：

* 在 J2ME，來原始碼跟資源預設是被壓縮的。而 BREW 的碼是不被壓縮的。
* J2ME 擁有較受歡迎的 IDE 開發平台或元件，如 Eclipse 以及 Netbeans，BREW 則否，目前僅能 Add-in 在 Visual C++ 上操作。

目前大多數的使用者會選擇二者兼用，或只用 J2ME. J2ME 提供較低廉的成本（無測試成本）。此外，J2ME 在歐洲廣泛被使用，BREW 雄霸美國與日本市場。即使在美國，J2ME phones 的市場仍較大。

## 組成

* BREW 模擬器（BREW Emulator）：開發人員可以測試無線應用程式在一系列仿真裝置 Windows 環境下運行的狀況。
* BREW MIF 編輯器（BREW MIF Editor）：應用模組的訊息檔（.mif）必須與該模組的 dll 檔案同名。可以生成一臨時 class id ，等到正式完成時必須向高通申請一正式 id。每一個 Module 都需要有自我標識的 MIF 檔，從 BREW 3.1 開始已經強制如此，靜態（static）Module 也需要有相應的 MIF。而在 BREW3.1 之前，對於靜態 Module 是沒有單獨的 MIF 檔的，但有一個 AEEAppInfo 的結構體來表示 Module 的資訊，裡面主要包括 clsid，app type 等資訊，每個靜態 Module 都需要有一個實例化的 AEEAppInfo 結構體，BREW 從此結構中獲得必要的 Module 資訊。
* BREW 資源編輯器（BREW Resource Editor）：用於建立應用程式的資源，包括字串、圖檔等。編譯時將 bri 檔轉成 bar 檔。

## 版本

**BREW 1.0**
: BREW SDK 版本 1.0 不支援靜音插入。BREW 1.0 中，當剩餘使用次數為 0 時，使用者將無法啟動應用程式（Applet）。

**BREW 1.1**
: 使用 AEESoundTone AEE\_TONE\_SILENCE 插入一段靜音。BREW 1.0、1.1 和 2.0 版本不支援播放 WAV 檔。BREW 1.1 以上版本提供的 PureVoice Convertor Utility Tool 可以將 .WAV 檔轉成 .QCP。

**BREW 2.0**
: 不對應使用 QVGA 液晶的裝置。

**BREW 2.1**
**BREW 3.0**
: 支援可插式儲存媒體（USB），並能讓使用者更容易於將支援 BREW 的手機連接到鍵盤及個人電腦等裝置的序列介面（Serial Interface），用來讀取音樂播放檔或相片檔，可提升行動電話的多媒體功能。關於 UI 方面全新的 BREW UI Toolkit（BUIT, BUIW）推出。

**BREW 3.1**
: 高通於加州聖地牙哥舉行的 BREW2004 開發者大會上發布，新版本提出 UiOne 的構想，擴展了對手機使用者 UI 的開發支援，如 Menu Control、E-Mail 等。

**BREW SDK 4.0.4**
: 目前最新版本。為 OME 廠商和第三方開發者提供一種環境去開發執行 BREW 4.0.4 上執行的裝置和程式。這個版本的 SDK 具有一種新的對於通話記錄、資訊、日曆、和電話本以及 BREW 4.0.3 所有特性的同步介面。

## 注釋

## 參見

* 智慧型電話
* 系統平台
* 行動應用開發 — How BREW stacks up against the alternatives on mobile platforms.
* J2ME
* WIPI

## 外部連結

* BREW
* In-depth discussion of BREW and other mobile platforms from European market perspective （頁面存檔備份，存於網際網路檔案館）
* BREW Gaming （頁面存檔備份，存於網際網路檔案館）
* Brew Test Unit - a unit testing framework for the Brew platform. （頁面存檔備份，存於網際網路檔案館）

### 主要發布商

* Digital Orchid （頁面存檔備份，存於網際網路檔案館）
* EA Mobile
* Glu （頁面存檔備份，存於網際網路檔案館）
* NIM （頁面存檔備份，存於網際網路檔案館）
* Namco Wireless

### 應用程式開發公司

* Advanced Mobile Applications （頁面存檔備份，存於網際網路檔案館）
* Econz （頁面存檔備份，存於網際網路檔案館）
* Remoba Inc （頁面存檔備份，存於網際網路檔案館）
* RiffWare （頁面存檔備份，存於網際網路檔案館）
* Rocket Mobile
* Comprehensive List

### 相關論壇

* BREW 中國開發者討論組