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

Antenna 實現 J2ME 多機型適配構建:預處理與自動化打包

     編輯:J2ME

Antenna 簡介

基於 Ant 的 J2ME 構建工具,支援編譯、預驗證、打包、混淆、運行、OTA 部署。核心優勢:預處理機制結合 J2ME Polish 設備數據庫,實現源碼級多機型適配。

預處理機制詳解

編譯前處理源碼中的預處理指令,生成針對目標設備的代碼。使用 wtkpreprocess 任務(version=2)。

Task 定義

<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 文件

完整 build.xml 核心片段

<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>

環境要求

  • Apache Ant 1.7.0
  • Antenna 0.9.15-beta
  • JDK 1.5、Eclipse 3.2
  • Eclipse 中運行需配置 ANT_HOME 並確保 ant/lib 含 Antenna JAR。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved