首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME MIDlet 開發部署全流程圖解:編譯、混淆、預審核、打包、JAD、OTA 安裝與生命周期管理

     編輯:J2ME

標準開發流程總覽

階段工具輸入輸出關鍵點
編譯javac*.java*.class (未混淆)-bootclasspath 指定 midpapi.zip
混淆 (可選)ProGuard / RetroGuard*.class*.class (混淆)縮減體積 30-50%、保護邏輯
預審核preverify混淆後 *.class帶 StackMap *.class設備端驗證加速、省電
打包jar預審核 *.class + 資源MIDletSuite.jar含 META-INF/MANIFEST.MF
描述文件文本編輯器—MIDletSuite.jadOTA 必備、屬性外部化
部署安裝數據線/紅外/藍牙/OTA.jar + .jad設備上運行AMS 管理生命周期

詳細步驟指南

1. 編譯


javac -bootclasspath %WTK_HOME%\lib\midpapi.zip -d build\classes src\com\myapp\*.java
  • -bootclasspath 必須指向 WTK 的 midpapi.zip (含 CLDC/MIDP 標準庫),避免誤用 JSE 類庫
  • 編碼建議 -encoding UTF-8

2. 混淆 (推薦 ProGuard)


# proguard.cfg
-injars build\classes
-outjars build\obfuscated
-libraryjars %WTK_HOME%\lib\midpapi.zip
-dontwarn
-keep public class * extends javax.microedition.midlet.MIDlet
-keepclassmembers class * {
    public protected *;
}
-optimizationpasses 3

java -jar proguard.jar @proguard.cfg

3. 預審核


preverify -classpath %WTK_HOME%\lib\midpapi.zip;build\obfuscated -d build\verified build\obfuscated
  • 輸出目錄 build\verified 含 StackMap 屬性的 class 文件
  • WTK 2.2+ 內建 preverify.exe

4. 打包 JAR


cd build\verified
jar cvfm ..\MyApp.jar ..\manifest.mf com\myapp\*.class res\*.png res\*.mid

manifest.mf 內容參見下節。

5. 編寫 JAD 描述文件


MIDlet-Name: MyApp
MIDlet-Version: 1.0.0
MIDlet-Vendor: MyCompany
MIDlet-1: MyApp,/icon.png,com.myapp.MyApp
MIDlet-Jar-URL: https://download.mycompany.com/MyApp.jar
MIDlet-Jar-Size: 45678
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.0
MIDlet-Description: My Awesome J2ME App
MIDlet-Icon: /icon.png
MIDlet-Data-Size: 10240
SERVER_URL: https://api.mycompany.com/v1/
  • MIDlet-Jar-Size = JAR 文件實際字節數 (dir MyApp.jar 或 ls -l)
  • MIDlet-Jar-URL OTA 必須為絕對 HTTP/HTTPS URL
  • 關鍵三屬性 (Name/Version/Vendor) 與 MANIFEST.MF **完全一致**

6. MANIFEST.MF 模板 (打包進 JAR)


Manifest-Version: 1.0
MIDlet-Name: MyApp
MIDlet-Version: 1.0.0
MIDlet-Vendor: MyCompany
MIDlet-1: MyApp,/icon.png,com.myapp.MyApp
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.0
MIDlet-Description: My Awesome J2ME App
MIDlet-Icon: /icon.png
MIDlet-Data-Size: 10240
Created-By: 1.6.0 (Sun Microsystems Inc.)

OTA (Over-The-Air) 安裝流程

  1. 用戶訪問 WAP/WEB 頁面 (WML/HTML),點擊 .jad 鏈接
  2. 設備下載 JAD,AMS 解析檢查:
    • 設備支持 CLDC/MIDP 版本?
    • JAR 大小 < 剩餘存儲?
    • 權限聲明 < 設備授予?
    • 屏幕尺寸/圖片格式兼容?
  3. 檢查通過 → 下載 JAR (流式寫入存儲)
  4. 驗證 JAR 完整性 (大小匹配、MANIFEST 解析)
  5. 安裝:創建 Suite 目錄、解壓類文件、註冊 RMS、創建桌面圖標
  6. (可選) POST 安裝狀態至 MIDlet-Install-Notify URL

MIDlet Suite 生命周期管理 (AMS 職責)

操作觸發AMS 行為數據處理
首次安裝用戶確認創建隔離存儲、註冊權限RMS 初始化空
更新 (版本號升高/相同/降低)用戶確認替換類文件/資源簽名一致/URL同源 → 保留 RMS;否則詢問用戶
刪除用戶選擇移除文件、註銷權限、刪除圖標RMS 默認刪除,可提示用戶保留
運行用戶點擊圖標實例化 MIDlet → Paused → startApp() → Active讀取 RMS、恢復狀態
暫停來電/按鍵鎖/切換應用pauseApp()釋放非關鍵資源、保存進度
銷毀用戶退出/系統回收destroyApp(true) → notifyDestroyed()釋放所有資源、持久化數據

安裝/刪除狀態上報代碼 (POST 代碼對照)


// 服務端接收 POST 參數示例 (JSP/Servlet)
String status = request.getParameter("status"); // 900, 901, 902...
String suiteName = request.getParameter("suite");
代碼含義
900成功
901內存不足
902用戶取消
903服務丟失 (網絡斷開)
904JAR 大小不匹配
905屬性不匹配 (JAD/MANIFEST 關鍵屬性不一致)
906無效的 JAD
907無效的 JAR
908Configuration/Profile 不兼容
909驗證失敗 (簽名/證書)
910授權失敗 (權限不足)
911Push 註冊失敗
912刪除通知

IDE 一鍵構建配置 (Ant/Eclipse/NetBeans)

現代 IDE 均內建 J2ME 插件,可自動完成上述全流程。核心配置點:

  • WTK 路徑設置 (含 midpapi.zip、preverify.exe)
  • 混淆器集成 (ProGuard 配置文件)
  • JAD 模板變量 (自動填寫 Jar-Size、版本號)
  • 簽名配置 (Keystore、別名、密碼) - 針對 Trusted Suite
  • OTA 部署目標 (服務器 URL、認證)

總結

從 .java 到手機運行,J2ME 獨有的 **預審核 + JAD/JAR 雙文件 + AMS 生命周期** 機制構建了完整的交付鏈路。掌握每個環節的輸入輸出、關鍵參數、常見錯誤碼,並將其固化為自動化構建腳本,是專業 J2ME 團隊交付高質量產品的基礎保障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved