基於 Ant 的 J2ME 構建工具,支援編譯、預驗證、打包、混淆、運行、OTA 部署。核心優勢:預處理機制結合 J2ME Polish 設備數據庫,實現源碼級多機型適配。
編譯前處理源碼中的預處理指令,生成針對目標設備的代碼。使用 wtkpreprocess 任務(version=2)。
<wtkpreprocess verbose="true" version="2"
srcdir="${dir.src}" destdir="${dir.dist}"
device="Nokia/6600" printsymbols="true"/>
device 指定目標機型,printsymbols 輸出所有符號便於調試。
public class MyCanvas
//#if 'nokia-ui'@JavaPackage
//#extends com.nokia.mid.ui.FullCanvas
//#else
extends Canvas
//#endif
{
//#ifdef key.LeftSoftKey
//#expand public final static int KEY_SOFT_LEFT = %key.LeftSoftKey%;
//#else
public final static int KEY_SOFT_LEFT = 6;
//#endif
//#ifdef key.RightSoftKey
//#expand public final static int KEY_SOFT_RIGHT = %key.RightSoftKey%;
//#else
public final static int KEY_SOFT_RIGHT = 7;
//#endif
int screenWidth = getWidth();
int screenHeight = getHeight();
public MyCanvas() {
// #if !('nokia-ui'@JavaPackage)
//# setFullScreenMode(true);
//#endif
}
protected void paint(Graphics g) {
//#ifdef ScreenSize
//#expand String screensize = "%ScreenSize%";
//#else
String screensize = "128x128";
//#endif
g.setColor(0); g.fillRect(0,0,screenWidth,screenHeight);
g.setColor(255,255,255);
g.drawString(screensize, screenWidth/2, screenHeight/2, 0);
}
}
解決:鍵值差異、螢幕尺寸差異、擴展 API 差異(如 Nokia FullCanvas)。注意:device.xml 缺導航鍵定義,需自行補充覆蓋 Antenna 包內文件。
src/ 源碼 res/ 資源 (png, properties, midi) build/ 編譯輸出 class、資源複製、jar/jad dist/ 預處理後 Java 文件
<target name="init">
<property name="dir.src" value="src"/>
<property name="dir.res" value="res"/>
<property name="dir.output" value="build"/>
<property name="dir.dist" value="dist"/>
<property name="dir.classes" value="${dir.output}/classes"/>
<property name="wtk.home" value="E:/Development/SDK/WTK25"/>
<property name="wtk.cldc.version" value="1.0"/>
<property name="wtk.midp.version" value="2.0"/>
<property name="wtk.obfuscate" value="true"/>
<!-- JAD/MIDlet 屬性定義 -->
</target>
<target name="clean" depends="init">
<delete dir="${dir.output}"/>
</target>
<target name="preprocess" depends="init,clean">
<mkdir dir="${dir.dist}"/>
<wtkpreprocess verbose="true" version="2"
srcdir="${dir.src}" destdir="${dir.dist}"
device="Nokia/6600" printsymbols="true"/>
</target>
<target name="compile" depends="preprocess">
<mkdir dir="${dir.classes}"/>
<wtkbuild srcdir="${dir.dist}" destdir="${dir.classes}"
target="1.1" source="1.2" preverify="false"
debug="${wtk.debug}" classpath="E:/Development/wtk100/lib/nokiaui.zip"/>
</target>
<target name="build" depends="compile">
<copy todir="${dir.classes}/res">
<fileset dir="${dir.res}" includes="*.png"/>
<fileset dir="${dir.res}" includes="*.properties"/>
<fileset dir="${dir.res}" includes="*.midi"/>
</copy>
<mkdir dir="${dir.output}/deployed"/>
<wtkjad jadfile="${dir.output}/deployed/${jad.filename}.jad"
jarfile="${dir.output}/deployed/${jar.filename}.jar"
name="${jad.midlet-name}" vendor="${jad.midlet-vendor}"
version="${jad.midlet-version}">
<midlet name="${jad.midlet-name}" class="${jad.midlet-class}" icon="${jad.midlet-icon}"/>
<attribute name="MicroEdition-Configuration" value="CLDC-1.0"/>
<attribute name="MicroEdition-Profile" value="MIDP-2.0"/>
</wtkjad>
<wtkpackage jarfile="${dir.output}/deployed/${jar.filename}.jar"
jadfile="${dir.output}/deployed/${jad.filename}.jad"
obfuscate="${wtk.obfuscate}" preverify="true"
classpath="E:/Development/wtk100/lib/nokiaui.zip">
<fileset dir="${dir.classes}"/>
</wtkpackage>
</target>
ANT_HOME 並確保 ant/lib 含 Antenna JAR。