直接用 WTK 打包引用 Nokia UI、Motorola Multimedia、Siemens 等專有 API 時,預驗證會報錯「找不到類」。Ant + Antenna 任務庫提供自定義 Bootclasspath,精確控制預驗證環境,完美解決碎片化編譯。
apache-ant-1.6.2+ + antenna-bin-0.9.13.jar → ANT_HOME/libnokiaui.jar、gx.jar、motorola.jar 等 → ANT_HOME/libANT_HOME、PATH+=${ANT_HOME}/bin<?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 |
wtkpreverify | CLDC 預驗證 | bootclasspath 指定基礎 API;classpath 加入廠商擴展 |
wtkrun | 啟動模擬器測試 | device="DefaultColorPhone" |
打包後 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
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 前身吧。