META-INF/MANIFEST.MFAMS 根據 MIDlet 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
value = lookup in JAD; // 優先讀取 JAD
if (value == null) {
value = lookup in MANIFEST; // JAD 無則回退 MANIFEST
}
關鍵結論:
MIDlet.getAppProperty("key") 獲取最終生效值| 屬性名 | 說明 |
|---|---|
| MIDlet-Name | Suite 名稱,必須與 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 開始連續) |
| 屬性名 | 說明 |
|---|---|
| MIDlet-Jar-URL | JAR 下載絕對 URL (OTA 必須為絕對路徑,如 https://host/app.jar) |
| MIDlet-Jar-Size | JAR 文件大小 (字節),用於下載進度顯示與空間預檢 |
MIDlet-Description:簡短描述MIDlet-Icon:Suite 圖標 (PNG,在 JAR 內)MIDlet-Info-URL:詳細信息頁面 URLMIDlet-Data-Size:RMS 最小持久化存儲需求 (字節)MIDlet-Permissions / MIDlet-Permissions-Opt:必需/可選權限 (MIDP 2.0 安全模型)MIDlet-Push-<n>:推送註冊信息MIDlet-Install-Notify / MIDlet-Delete-Notify:安裝/刪除狀態回調 URLMIDlet-Delete-Confirm:刪除確認提示文本MIDlet- 或 MicroEdition- 開頭,如 SERVER_URL,通過 getAppProperty 讀取,實現免重編譯配置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")); }
}
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
jar cvf MIDlets.jar MIDlet1.class MIDlet2.class MIDlet3.class掌握 JAD/MANIFEST 屬性優先級、簽名驗證規則、必備與可選屬性矩陣,是 MIDP 應用順利部署、靈活配置、安全分發的基石。善用自定義屬性實現「配置外部化」,可大幅降低多環境部署維護成本。