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

J2ME Ant 打包實戰:解決平台 API 碎片化與 JAR 瘦身

     編輯:J2ME

痛點:WTK 打包無法處理廠商擴展 API

直接用 WTK 打包引用 Nokia UI、Motorola Multimedia、Siemens 等專有 API 時,預驗證會報錯「找不到類」。Ant + Antenna 任務庫提供自定義 Bootclasspath,精確控制預驗證環境,完美解決碎片化編譯。

環境準備清單

  1. apache-ant-1.6.2+ + antenna-bin-0.9.13.jar → ANT_HOME/lib
  2. 廠商 API JAR:nokiaui.jar、gx.jar、motorola.jar 等 → ANT_HOME/lib
  3. 環境變數:ANT_HOME、PATH+=${ANT_HOME}/bin

build.xml 核心結構解析

<?xml version="1.0"?>
<project name="MyGame_S40" default="build" basedir=".">
  <property name="wtk.home" value="C:/WTK252"/>
  <taskdef resource="antenna.properties"/>

  <target name="clean">
    <delete dir="classes"/>
    <delete><fileset dir="."><exclude name="build.xml"/></fileset></delete>
  </target>

  <target name="build">
    <!-- 1. 產生 JAD -->
    <wtkjad jadfile="${name}.jad" jarfile="${name}.jar"
            name="MyGame" vendor="MyCorp" version="1.0"
            manifest="MANIFEST.MF">
      <midlet name="MyGame" icon="/icon.png" class="GameMidlet"/>
    </wtkjad>

    <!-- 2. 編譯(不預驗證) -->
    <delete dir="classes"/>
    <mkdir dir="classes"/>
    <wtkbuild srcdir="." destdir="classes" preverify="false" encoding="utf-8"/>

    <!-- 3. 打包 JAR -->
    <wtkpackage jarfile="${name}.jar" jadfile="${name}.jad"
                manifest="MANIFEST.MF" obfuscate="true">
      <fileset dir="classes"/>
      <fileset dir="res"/>
    </wtkpackage>

    <!-- 4. 預驗證(關鍵:指定 bootclasspath) -->
    <wtkpreverify jarfile="${name}.jar" jadfile="${name}.jad"
                  bootclasspath="${wtk.home}/lib/midpapi.zip"
                  classpath="${wtk.home}/lib/ext/nokiaui.jar"/>
  </target>
</project>

關鍵任務詳解

任務作用關鍵屬性
wtkbuild編譯 Java 源碼preverify="false" 分離編譯與預驗證
wtkpackage打包 JAR/JAD、混淆obfuscate="true" 啟用 ProGuard
wtkpreverifyCLDC 預驗證bootclasspath 指定基礎 API;classpath 加入廠商擴展
wtkrun啟動模擬器測試device="DefaultColorPhone"

MANIFEST.MF 精簡技巧

打包後 dist/MANIFEST.MF 可手動精簡再替換回 JAR:

MIDlet-Name: MyGame
MIDlet-Version: 1.0
MIDlet-Vendor: MyCorp
MIDlet-1: MyGame,/icon.png,GameMidlet
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.1

JAD 必填屬性補充

Ant 任務不支援的屬性(如計費資訊)需手工加入 JAD:

MIDlet-Data-Size: 1024
MIDlet-Permissions: javax.microedition.io.Connector.http
Nokia-MIDlet-Category: Game
Media-Price: 5元/次

多平台構建矩陣

<target name="build-all">
  <antcall target="build"></antcall>
  <antcall target="build"></antcall>
  <antcall target="build"></antcall>
</target>

<target name="build">
  <condition property="ext.lib" value="${wtk.home}/lib/ext/nokiaui.jar">
    <equals arg1="${platform}" arg2="nokia_s40"/>
  </condition>
  <condition property="ext.lib" value="${wtk.home}/lib/ext/nokiaui.jar;${wtk.home}/lib/ext/s60.jar">
    <equals arg1="${platform}" arg2="nokia_s60"/>
  </condition>
  <!-- wtkpreverify classpath="${ext.lib}" -->
</target>

結語

Ant + Antenna 將「編譯、打包、預驗證、混淆、多平台構建」全自動化,配合Bootclasspath 隔離與Manifest 精簡,是 J2ME 專案交付的工業級標準流程。告別手工點擊 WTK 介面,擁抱 CI/CD 前身吧。

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