受限於設備資源,**J2ME 增加了「預驗證」與「打包/混淆」兩大強制步驟**,且最終必須在真機驗證,模擬器不完全等同。
文本編輯器或 IDE(NetBeans/EclipseME/IntelliJ)均可,語法為 Java 1.3 子集(無 java.lang.reflect、java.io.* 部分類)。
javac -bootclasspath ${WTK}/lib/midpapi.jar -source 1.3 -target 1.1 -d bin src/*.java
IDE 通常自動處理 classpath 與版本參數。
preverify -classpath ${WTK}/lib/midpapi.jar:bin -d output bin
作用:離線檢查字節碼合法性(類結構、棧圖、無非法指令),減少設備端驗證開銷,提升啟動速度。WTK / IDE 內建,通常自動觸發。
IDE「Run」→ 啟動模擬器 → 功能驗證 → 日誌分析 → 回步驟 1 修改。注意:模擬器行為與真機存在差異(GC 時機、網絡延遲、按鍵映射、屏幕尺寸)。
jar cvf app.jar -C output .(含預驗證後 class + 圖片/音頻/數據文件)通過數據線/藍牙/OTA 部署到**至少 3 款目標機型**執行:功能測試、壓力測試(長時間運行)、中斷測試(來電/短信/低電)、兼容性測試(不同屏幕、鍵盤、VM 實現)。真機無誤方可發布。
| 文件 | 作用 | 關鍵屬性 |
|---|---|---|
| JAR | 程式碼 + 資源封裝 | 所有 class、png、wav、dat… |
| JAD | 應用描述,供 AMS 解析 | MIDlet-Name, MIDlet-Version, MIDlet-Vendor, MIDlet-Jar-URL, MIDlet-Jar-Size, MIDlet-1 (主類), MicroEdition-Profile, MicroEdition-Configuration, MIDlet-Permissions… |
部分老機型**僅需 JAR**(內含 Manifest 滿足屬性),但**標準發布應同時提供 JAD + JAR**,OTA 下載時先拉 JAD 再決策下載 JAR。
| 階段 | 推薦工具 | 備註 |
|---|---|---|
| 編碼/調試 | NetBeans 8.2 + Mobility Pack / Eclipse + EclipseME | 內建模擬器、預驗證、混淆、打包一鍵完成 |
| 命令行構建 | Ant + WTK Ant Tasks | CI/CD 自動化首選 |
| 混淆 | ProGuard 6.x | 規則靈活、增量混淆、映射文件生成 |
| 真機部署 | Nokia PC Suite / Sony Ericsson Sync / OTA 服務器 | 按目標品牌選擇 |
java.lang.reflect / java.net.Proxy 等缺失 API → 預驗證通過但真機 NoClassDefFoundErrorMIDlet-Jar-Size 與實際 JAR 大小不符 → OTA 安裝失敗
Build complete: ${dist}/${midlet.name}.jar + .jad
J2ME 開發流程看似繁瑣,**實際 80% 工作由 IDE/構建腳本自動化**。核心紀律只有三條:語法嚴守子集、預驗證不跳過、真機測試不偷懶。建立標準化流程並納入 CI,即可穩定交付高質量 MIDlet。