J2ME Polish 是強大的 J2ME 構建與預處理框架,核心優勢在於:**Ant 擴充構建腳本**、**龐大裝置資料庫**、**預處理指令實現多版本構建**。本文聚焦 Build 功能,涵蓋安裝、Eclipse 整合、build.xml 核心配置、裝置資料庫應用與預處理實戰。
j2mepolish-2.x-installer.jar 執行安裝File → New → Project 出現 J2ME Polish Project 即成功Right-click build.xml → Run As → Ant Buildproject/ ├── build.xml # Ant 構建腳本 (核心) ├── src/ # Java 源碼 (含預處理指令) ├── resources/ # 圖片、音效、資料檔 ├── build/ # 輸出目錄 (自動生成) │ ├── compiled/ # 編譯類別 │ ├── packaged/ # JAR/JAD │ └── preprocessed/ # 預處理後源碼 (除錯用) └── lib/ # 第三方庫
| 區塊 | 用途 | 關鍵屬性/子元素 |
|---|---|---|
<j2me> | MIDlet 元資訊 | name, version, vendor, mainClass, <jad> 自定屬性 |
<devices> | 目標裝置群 | 引用裝置資料庫群組/識別碼,決定構建哪些版本 |
<build> | 構建控制 | usePolishGui="false" (未用 Polish UI 必關閉,否則增大 JAR) |
<preprocess> | 預處理器 | 定義符號、引入裝置能力、條件編譯邏輯 |
Polish 內建 230+ 裝置定義 (devices.xml),涵蓋:螢幕尺寸、Heap 大小、支援 API (MMAPI, JSR-82, Nokia UI...)、已知 Bug、字型大小、最大 JAR 限制等。
<device>
<identifier>Nokia/6600</identifier>
<groups>Series60</groups>
<features>hasCamera</features>
<capability name="ScreenSize" value="176x208"/>
<capability name="HeapSize" value="3mb"/>
<capability name="JavaPackage" value="mmapi, wmapi, btapi, jtwi"/>
<capability name="JavaPlatform" value="MIDP/2.0"/>
<capability name="Bugs" value="BluetoothRfcommInputStream"/>
<capability name="Font.small" value="15"/>
<capability name="Font.medium" value="16"/>
<capability name="Font.large" value="21"/>
</device>
#if nokia-ui 為真${polish.ScreenSize} 等變數注入代碼/資源<devices>
<requirement name="Identifier" value="Nokia/6600,Motorola/E680"/>
</devices>
public void drawClip(Graphics g, int x, int y, Image img,
int clipX, int clipY, int clipW, int clipH, int mode) {
//#if polish.api.nokia-ui
// Nokia UI 專用裁切繪製
DirectUtils.drawRegion(g, img, clipX, clipY, clipW, clipH, mode, x, y, 0);
//#else
// MIDP 2.0 標準裁切
g.setClip(x, y, clipW, clipH);
g.drawImage(img, x - clipX, y - clipY, Graphics.TOP | Graphics.LEFT);
//#endif
}
// 取得裝置能力注入常數
//#= int HEAP_SIZE = ${polish.HeapSize}; // 預處理後 → int HEAP_SIZE = 3145728;
//#= String SCREEN = "${polish.ScreenSize}"; // → "176x208"
執行 ant 後,build/preprocessed/ 下生成各裝置專屬源碼,build/packaged/ 下產出 App_Nokia_6600.jar/jad、App_Motorola_E680.jar/jad 等差異化封裝。
| 優點 | 缺點/限制 |
|---|---|
| 裝置資料庫極其豐富,消除手工收集規格痛苦 | 構建邏輯集中在單一 build.xml,多資源目錄/多 JAD 屬性差異化配置較繁瑣 |
| 預處理指令直觀,條件編譯零學習成本 | 依賴 Polish 自帶庫 (midp2.0.jar 等),升級不便 |
| Ant 生態相容,CI/CD 整合無縫 | 學習曲線:進階功能 (資源預處理、混淆整合) 需深入文檔 |
| 支援資源預處理 (圖片自動縮放、音訊轉碼) | 社群活躍度下降,新機型資料庫更新滯後 |
J2ME Polish Build 將「裝置碎片化」轉化為「構建時參數化」,配合預處理實現 單一代碼庫 → 多優化版本。核心價值在於裝置資料庫與預處理器的結合。對於維護舊版 J2ME 專案或需支援大量機型的團隊,仍是極具性價比的選擇。新專案建議評估 Ant/Maven + Antenna 組合,獲得更現代的構建體驗。