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

J2ME MIDP 設備碎片化解決方案:NetBeans + Marv The Miner 實戰(下)

     編輯:J2ME

建置驗證:一鍵產出多平台 JAR

Build → Build All Main Project Configurations。dist/ 目錄下將產生:

dist/
├── DefaultConfiguration/
│   ├── MarvTheMiner.jar
│   └── MarvTheMiner.jad
├── NokiaSeries60/
│   ├── MarvTheMiner.jar
│   └── MarvTheMiner.jad
├── NokiaOther/
│   ├── MarvTheMiner.jar
│   └── MarvTheMiner.jad
├── Motorola/
│   ├── MarvTheMiner.jar
│   └── MarvTheMiner.jad
└── Vodafone/
    ├── MarvTheMiner.jar
    └── MarvTheMiner.jad

每個 JAR 僅含對應平台類,體積最小化。若缺少某平台庫導致預驗證失敗,手動註釋該配置的平台調用碼或補全庫。

運行測試:並行啟動多模擬器

  • 工具列 Configuration 下拉框切換目標配置
  • F5 運行 → 對應模擬器啟動
  • 可同時運行多個配置驗證差異

進階配置技巧

1. 每配置獨立 JAD 屬性

Properties → Application Descriptor → 取消「Use Values from DefaultConfiguration」→ 設定專屬 MIDlet-Version、MIDlet-Name。

2. 專案依賴管理(多配置庫專案)

專案 A(庫)與專案 B(應用)均有 Release/Debug 配置:

  1. B 的 Properties → Libraries & Resources → Add Project → 選 A
  2. 在 Release 配置下選 A 的 dist/Release/ JAR
  3. 在 Debug 配置下選 A 的 dist/Debug/ JAR

3. 版控友好性

  • 源碼檔案永遠以 DefaultConfiguration 視角儲存(預處理器註釋保留),避免切換配置產生無謂 diff。
  • 務必提交 nbproject/project.properties。

4. 命令列構建

ant run                    # 使用當前活動配置
ant run -Dconfig.active=NokiaSeries60  # 指定配置

5. 資源檔分級打包(兩種方案)

方案操作適用場景
Libraries & Resources預製 res_large.jar、res_medium.jar、res_small.jar,各配置指向對應 JAR大量圖片/音效、解析度差異大
Filtering資源置於 src/ 下,Filtering 樹勾選各配置包含的檔案少量差異檔案、同名不同內容

非 UEI 模擬器整合:Motorola 7.5 手動掛載

步驟 1:建立平台定義 XML

路徑:{userhome}/.netbeans/{version}/config/Services/Platforms/org-netbeans-api-java-Platform/

檔名:SDK_4.1_MRI_7.5.xml

<?xml version='1.0'?>
<!DOCTYPE platform PUBLIC '-//NetBeans//DTD J2ME PlatformDefinition 1.0//EN'
'https://www.netbeans.org/dtds/J2ME-platformdefinition-1_0.dtd'>
<platform name="Motorola_7_5"
    home="C:/WTK/MotorolaSDK v4.1 for J2ME/Emulator7.5"
    type="custom"
    displayname="Motorola 7.5"
    srcpath=""
    preverifycmd=""{platformhome}/bin/preverify.exe" -classpath "{classpath}" -d "{destdir}" "{srcdir}""
    runcmd="">
  <device name="Motorola_7_5" securitydomains="trusted,untrusted"
      description="Motorola 7.5">
    <configuration name="CLDC" version="1.1" displayname="CLDC"
        classpath="${platform.home}/lib/cldc.zip" dependencies="" default="true"/>
    <profile name="MIDP" version="2.0" displayname="MIDP"
        classpath=";${platform.home}/lib/midp.zip" dependencies="" default="true"/>
  </device>
</platform>

重啟 IDE,刪除 {userhome}/var/cache/(保留 mdrstorage),即可在 Platform Manager 見到 Motorola 7.5。

步驟 2:自定義 run 目標(因 Motorola 啟動參數非標準)

編輯專案 build.xml,新增目標:

<target name="run" depends="init">
  <condition property="run.motorola">
    <equals arg1="${config.active}" arg2="Motorola"/>
  </condition>
  <ant target="run_normal" unless="run.motorola"/>
  <ant target="run_motorola" if="run.motorola"/>
</target>

<target name="run_normal" depends="init">
  <nb-run commandline="${platform.runcommandline}" ... />
</target>

<target name="run_motorola" depends="init">
  <property name="project.home" location="."/>
  <java dir="${platform.home}/bin" fork="true"
      classname="com.mot.tools.j2me.emulator.Emulator"
      classpath="${platform.home}/bin/Emulator.jar;${platform.home}/bin/configtool.jar">
    <jvmarg value="-Djava.library.path=${platform.home}/lib"/>
    <arg value="-classpath ${project.home}/${dist.dir}/${dist.jar}"/>
    <arg line="-deviceFile"/>
    <arg value="${platform.home}/bin/RESOUR~1/T720I~1.PRO"/>
    <arg line="javax.microedition.midlet.AppManager Miner -JSA 1 1"/>
  </java>
</target>

原理:config.active=Motorola 時觸發 run_motorola,直接用 java 命令啟動模擬器主類,傳遞 JAR 路徑、裝置描述檔、MIDlet 類名。

總結:NetBeans 碎片化解決方案核心價值

維度傳統做法NetBeans 方案
平台隔離運行時 Class.forName + 註釋編譯時預處理器區塊 + 專案配置
JAR 體積含所有平台碼僅含目標平台碼
效能運行時分派開銷零開銷
原始碼可讀性雜亂清晰區塊標記
建置自動化手動切換/打包Ant 一鍵多 JAR / CI 整合
非標準模擬器無法整合XML 定義 + build.xml 自定義 run 目標

結語

Marv The Miner 重構完成。同一碼庫,5 個配置,5 個精簡 JAR,零運行時平台判斷。這就是專業 J2ME 團隊的交付標準:**配置管理編譯時變異點,預處理器隔離平台差異,Ant 自動化多產物產出**。掌握這套流程,設備碎片化不再是噩夢,而是可控的工程變量。

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