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

MIDP 應用屬性機制深度解析:JAD 與 MANIFEST.MF 優先級、簽名驗證與多 MIDlet Suite 部署實戰

     編輯:J2ME

核心概念

  • JAR:打包後的可執行文件,含類文件、資源、META-INF/MANIFEST.MF
  • JAD (Java Application Descriptor):純文本描述文件,提供安裝前的元數據預覽,支持 OTA 預檢
  • AMS (Application Management System):設備端管理器,負責下載、安裝、更新、刪除、權限控制

屬性讀取優先級邏輯 (MIDP 2.0 規範)

AMS 根據 MIDlet Suite 信任狀態決定讀取來源:

可信任 (Trusted/Signed) Suite


// 邏輯偽代碼
String v0 = lookup in MANIFEST.MF;
String v1 = lookup in JAD;
if (v0 != null && v1 != null) {
    assert v0.equals(v1);  // 必須一致,否則拒絕安裝
}
value = (v1 != null) ? v1 : v0;  // JAD 覆蓋 MANIFEST

非可信任 (Untrusted/Unsigned) Suite


value = lookup in JAD;           // 優先讀取 JAD
if (value == null) {
    value = lookup in MANIFEST;  // JAD 無則回退 MANIFEST
}

關鍵結論:

  • 簽名應用:JAD 與 MANIFEST 關鍵屬性必須完全一致,JAD 可覆蓋非關鍵屬性
  • 非簽名應用:JAD 優先,MANIFEST 為備選
  • 代碼中統一調用 MIDlet.getAppProperty("key") 獲取最終生效值

MIDP 2.0 必備屬性清單 (共 18 項)

JAD + MANIFEST 雙方必備 (6 項)

屬性名說明
MIDlet-NameSuite 名稱,必須與 JAR 文件名一致 (安裝時驗證)
MIDlet-Version版本號,格式 主.次.微 (如 1.0.0)
MIDlet-Vendor提供商名稱
MicroEdition-Profile所需 Profile (如 MIDP-2.0)
MicroEdition-Configuration所需 Configuration (如 CLDC-1.1)
MIDlet-<n>Suite 內每個 MIDlet 描述,格式:名稱,圖標路徑,類名 (n 從 1 開始連續)

僅 JAD 必備 (2 項)

屬性名說明
MIDlet-Jar-URLJAR 下載絕對 URL (OTA 必須為絕對路徑,如 https://host/app.jar)
MIDlet-Jar-SizeJAR 文件大小 (字節),用於下載進度顯示與空間預檢

常用可選屬性

  • MIDlet-Description:簡短描述
  • MIDlet-Icon:Suite 圖標 (PNG,在 JAR 內)
  • MIDlet-Info-URL:詳細信息頁面 URL
  • MIDlet-Data-Size:RMS 最小持久化存儲需求 (字節)
  • MIDlet-Permissions / MIDlet-Permissions-Opt:必需/可選權限 (MIDP 2.0 安全模型)
  • MIDlet-Push-<n>:推送註冊信息
  • MIDlet-Install-Notify / MIDlet-Delete-Notify:安裝/刪除狀態回調 URL
  • MIDlet-Delete-Confirm:刪除確認提示文本
  • 自定義屬性:不以 MIDlet- 或 MicroEdition- 開頭,如 SERVER_URL,通過 getAppProperty 讀取,實現免重編譯配置

實戰:多 MIDlet Suite 部署示例

三個獨立 MIDlet 類

public class MIDlet1 extends MIDlet { 
    public void startApp() { Display.getDisplay(this).setCurrent(new Form("1")); }
    // pauseApp/destroyApp 省略
}
public class MIDlet2 extends MIDlet { 
    public void startApp() { Display.getDisplay(this).setCurrent(new Form("2")); }
}
public class MIDlet3 extends MIDlet { 
    public void startApp() { Display.getDisplay(this).setCurrent(new Form("3")); }
}

JAD 文件內容

MIDlet-Name: MIDlets
MIDlet-Version: 1.0.0
MIDlet-Vendor: Midlet Suite Vendor
MIDlet-1: MIDlet2,,MIDlet2
MIDlet-2: MIDlet1,,MIDlet1
MIDlet-3: MIDlet3,,MIDlet3
MIDlet-Jar-URL: MIDlets.jar
MIDlet-Jar-Size: 2048
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0

打包與驗證步驟

  1. 編譯三個類文件
  2. jar cvf MIDlets.jar MIDlet1.class MIDlet2.class MIDlet3.class
  3. 創建上述 JAD 文件 (同目錄)
  4. 雙擊 JAD (WTK 模擬器關聯) 或 OTA 部署至手機
  5. 啟動時將顯示 Suite 菜單,用戶可選擇運行 MIDlet1/2/3

常見坑點避雷

  • MIDlet-Name ≠ JAR 文件名:安裝失敗,錯誤碼 905 (屬性不匹配)
  • MIDlet-n 編號不連續或重複:AMS 拒絕安裝
  • OTA 時 MIDlet-Jar-URL 使用相對路徑:部分設備下載失敗,務必用絕對 URL
  • 簽名 Suite 的 JAD/MANIFEST 關鍵屬性不一致:安裝被拒,錯誤碼 905
  • JAD 文件過大:部分舊設備限制 JAD ≤ 5KB,避免存放大量自定義數據

總結

掌握 JAD/MANIFEST 屬性優先級、簽名驗證規則、必備與可選屬性矩陣,是 MIDP 應用順利部署、靈活配置、安全分發的基石。善用自定義屬性實現「配置外部化」,可大幅降低多環境部署維護成本。

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