`

Antenna与j2me打包

    博客分类:
  • ant
阅读更多

众所周知,j2me平台受限于各厂商对KVM的实现不同。此外,由于不同终端性能的差别,j2me开发中的 机型适配是相当繁琐的工作。当然,对于该难题,有很多种解决方案。例如,可以使用j2mepolish,请参考本人以前发表的文章《使用J2mePolishbuildpreprocess功能》。本文主要讨论如何使用antenna来解决这个问题。

 

Antenna介绍

Antenna是基于antj2me开发工具。可以使用antennaj2me程序进行 编译、校验、打包、混淆等,甚至可以通过antenna所定义的task,运行已经打包完成的jar;还可以将打包完成jadjar部署到OTA服务器上。

以上功能,只是对ant的扩展,在我以前的文章《使用Antj2me程序打包》也讨论。其实,以上所说的功能,直接使用ant也能实现,只是antenna对这些task进行了扩展,使得对j2me程序的打包过程更加的傻瓜话罢了。貌似,话说到这里有些自相矛盾了,既然这些功能ant都能实现,还介绍antenna干嘛呢?其实,本人最推崇antenna的,不仅是它对j2me打包过程的简化,而且特别赞赏它对预处理的支持。除此之外,antenna的预处理,结合了j2mepolish所提供的device.xml数据库,就是说,我们也可以像在j2mepolish中那样,对源程序进行相关的处理,以达到多机型时配的要求。

 

Antenna中的预处理

中的预处理原来与j2mepolish等支持预处理的软件一致,都是在编译之前,对代码中定义的预处理脚本进行处理,并生成符合脚本定义规则的代码。antenna中,通过“wtkpreprocesstask来进行预处理。关于预处理脚本的定义,请参考antenna自带doc中的wtkpreprocess.html。此外,本文讨论的preprocessor是指新版的preprocessor,即version=2,原来的预处理机制不在本文讨论范围之内。下面举例说明,如何通过在代码中定义脚本获取终端相关信息,类似于《使用J2mePolishbuildpreprocess功能》一文中的例子,感兴趣的朋友可以结合起来学习。

Task定义如下:

 

xml 代码
  1. <wtkpreprocess verbose="true" version="2" srcdir="${dir.src}" destdir="${dir.dist}" 
  2. device="Nokia/6600" printsymbols="true" />  

其中,device为制定的机型型号,而printsymbols用于标示,是否在处理过程,将所有的标记打印出来。出于学习和调试目的,最好设置为true

 

源代码片断:

java 代码
  1. public class MyCanvas  
  2. //#if 'nokia-ui'@JavaPackage  
  3. //# extends com.nokia.mid.ui.FullCanvas  
  4. //#else  
  5. extends Canvas  
  6. //#endif  
  7. {  
  8.     //#ifdef key.LeftSoftKey  
  9.     //#expand public final static int KEY_SOFT_LEFT = %key.LeftSoftKey%;  
  10.     //#else  
  11.     public final static int KEY_SOFT_LEFT = 6;  
  12.     //#endif  
  13.       
  14.     //#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(00, screenWidth, screenHeight);  
  •         g.setColor(255,255,255);  
  •         g.drawString(screensize, screenWidth/2, screenHeight/20);  
  •     }  
  • }  
  • 如此一来,就可以通过antenna中的预处理机制,解决多机型之间,键值不同,屏幕大小不同,扩展API不同等问题。

    注意,device.xml中,有些数据并没有安全定义。例如,各终端的导航键值就没有定义。可自行添加到device.xml中,然后覆盖原来的antenna包中的device.xml即可。 

    目录结构定义

    在打包过程中,对整个工程的目录设置如下,具体体现在build.xml

    src ——源码目录

    res——资源目录

    build

    —— 编译后的class文件以及从res复制过来的资源文件——jarjad文件

    dist——预处理后的java文件

    Ant脚本

    按照以上分析,build.xml文件定义如下:

    xml 代码
    1. <target name="init" description="变量定义">  
    2.     <echo message="Define variable" />  
    3.     <!-- 相关变量定义 -->  
    4.     <property name="basedir" value="." />  
    5.     <property name="midlet.version" value="1.0" />  
    6.     <property name="jad.filename" value="AntennaApp" />  
    7.     <property name="jar.filename" value="${jad.filename}" />  
    8.     <property name="wtk.proguard.home" value="E:\Develpment\proguard3.9"/>  
    9.   
    10.     <!-- 目录结构定义 -->  
    11.     <property name="dir.src" value="src" />  
    12.     <property name="dir.res" value="res" />  
    13.     <property name="dir.output" value="${basedir}/build" />  
    14.     <property name="dir.dist" value="${basedir}/dist" />  
    15.     <property name="dir.classes" value="${dir.output}/classes" />  
    16.     <property name="dir.deployed" value="${dir.output}/deployed" />  
    17.   
    18.     <property name="wtk.home" value="E:\Develpment\SDK\WTK25" />  
    19.     <property name="wtk.cldc.version" value="1.0" />  
    20.     <property name="wtk.midp.version" value="2.0" />  
    21.     <property name="wtk.wma.enabled" value="false" />  
    22.     <property name="wtk.debug" value="false" />  
    23.   
    24.     <property name="wtk.obfuscate" value="true" />  
    25.   
    26.     <!-- JAD相关属性定义-->  
    27.     <property name="jad.midlet-name" value="AntennaApp" />  
    28.     <property name="jad.midlet-vender" value="org" />  
    29.     <property name="jad.midlet-version" value="1.0.0" />  
    30.   
    31.     <!--Midlet相关定义-->  
    32.     <property name="jad.midlet-class" value="MyMIDlet" />  
    33.     <property name="jad.midlet-icon" value="" />  
    34.   
    35.     <!--发布-->  
    36.     <property name="deploy.target" value="http://localhost:8080/deployer" />  
    37.     <property name="deploy.login" value="admin" />  
    38.     <property name="deploy.password" value="admin" />  
    39.   
    40. <!--</span-->target>  
    41.   
    42. <target name="clean" depends="init" description="初始化环境">  
    43.     <echo message="Clean dir" />  
    44.     <delete dir="${dir.output}" />  
    45. <!--</span-->target>  
    46.   
    47.   
    48. <target name="preprocess" depends="init,clean" description="预处理">  
    49.     <echo message="preprocess" />  
    50.     <mkdir dir="${dir.dist}" />  
    51.       
    52.     <wtkpreprocess verbose="true" version="2" srcdir="${dir.src}" destdir="${dir.dist}" device="Nokia/6600" printsymbols="true" />  
    53. <!--</span-->target>  
    54.   
    55. <target name="compile" depends="preprocess" description="编译">  
    56.     <echo>Starting compile<!--</span-->echo>  
    57.     <mkdir dir="${dir.classes}" />  
    58.   
    59.     <echo>build from all the ${dir.src} to ${dir.classes}<!--</span-->echo>  
    60.   
    61.     <wtkbuild srcdir="${dir.dist}" destdir="${dir.classes}" target="1.1" source="1.2" preverify="false" debug="${wtk.debug}" listfiles="no" classpath="E:\Develpment\wtk100\lib\nokiaui.zip">  
    62.     <!--</span-->wtkbuild>  
    63.   
    64. <!--</span-->target>  
    65.   
    66. <target name="build" depends="compile" description="生成">  
    67.        <echo message="Packaging library"/>             
    68.        <copy todir="${dir.classes}/res">  
    69.            <fileset dir="${dir.res}" includes="*.png" />  
    70.            <fileset dir="${dir.res}" includes="*.properties" />  
    71.            <fileset dir="${dir.res}" includes="*.midi" />  
    72.        <!--</span-->copy>  
    73.     <mkdir dir="${dir.deployed}" />  
    74.       
    75.        <wtkjad jadfile="${dir.deployed}/${jad.filename}.jad"  
    76.                jarfile="${dir.deployed}/${jar.filename}.jar"  
    77.                name="${jad.midlet-name}"  
    78.                vendor="${jad.midlet-vender}"  
    79.                version="${jad.midlet-version}">  
    80.             
    81.                <midlet name="${jad.midlet-name}"  
    82.                    class="${jad.midlet-class}"  
    83.                    icon="${jad.midlet-icon}"/>  
    84.             
    85.            <attribute name="MIDlet-Icon"            value="${jad.midlet-icon}" />  
    86.            <attribute name="MIDlet-Permissions"     value="${jad.midlet-permissions}"/>  
    87.         <attribute name="MicroEdition-Configuration"     value="CLDC-1.0"/>  
    88.         <attribute name="MicroEdition-Profile"     value="MIDP-2.0"/>  
    89.        <!--</span-->wtkjad>  
    90.         
    91.        <wtkpackage jarfile="${dir.deployed}/${jar.filename}.jar"  
    92.                    jadfile="${dir.deployed}/${jad.filename}.jad"  
    93.                    obfuscate="${wtk.obfuscate}"   
    94.                    preverify="true" classpath="E:\Develpment\wtk100\lib\nokiaui.zip">  
    95.             
    96.            <fileset dir="${dir.classes}"/>  
    97.             
    98.        <!--</span-->wtkpackage>  
    99. <!--</span-->target>  

     

    1. 注意:如果是在Eclipse中使用ant 来运行build.xml,请注意ant_home路径的设置,且确认ant_home\bin目录下存在antenna包。
    2.  
    3. 软件版本
    4. apache-ant-1.7.0
    5. antenna-bin-0.9.15-beta.jar
    6. jdk1.5
    7. eclipse3.2
    8.  
    9. 参考文章
    10. J2ME Antenna 入门 作者:redduke1202
    11.  
    12. Using_Ant_and_Antenna_MIDP Nokia文档
    13.  
    14. j2me build.xml例子》 作者:Peter
    <!---->
    0
    2
    分享到:
    评论

    相关推荐

      wxh \Antenna与j2me打包

      Antenna与j2me打包

      J2ME的编译工具

      为了构建和管理J2ME项目,开发者通常会使用特定的编译工具,其中"Antenna"就是一个针对J2ME应用的编译工具,它基于Apache Ant构建,为J2ME应用程序的打包和部署提供了便利。 **Apache Ant** Apache Ant是一个Java...

      antenna-bin-1.0.2.jar

      Antenna是基于ant的j2me开发工具。可以使用antenna对j2me程序进行 编译、校验、打包、混淆等,甚至可以通过antenna所定义的task,运行已经打包完成的jar;还可以将打包完成jad和jar部署到OTA服务器上。

      j2me开发环境配置

      同时,你可以选择是否启用Antenna JAR,它可以帮助你使用Ant脚本来自动化J2ME程序的打包过程。 接着,配置**设备管理**。在"Device Management"中,浏览并选择WTK安装目录下的"bin"文件夹,然后点击"Refresh",...

      antenna-1.1.0-beta

      总的来说,"antenna-1.1.0-beta"是一个强大的J2ME打包工具,它简化了Eclipse中的J2ME项目构建过程,提高了开发效率,并提供了源代码供开发者进一步定制和扩展。通过理解和掌握Antenna的使用,J2ME开发者可以更好地...

      J2ME学习之环境搭建

      4. 如果需要使用Antenna(用于打包发布)和混淆器,可以在相应位置进行配置。 创建J2ME项目: 1. 通过“File”&gt;“New”&gt;“Other”&gt;“J2ME”&gt;“J2ME Modlet Suite”创建一个新的J2ME项目。 2. 在项目内创建一个...

      Eclipse+EclipseME+WTK搭建J2ME开发环境

      - 在“Antenna JAR”项中,可选填入 Antenna JAR 的路径,这将允许使用 Ant 脚本来打包 J2ME 程序。 3. **设备管理**: - 在首选项中选择“设备管理”,点击“Import”,浏览并选择 WTK 的 bin 目录,然后点击...

      antenna-src-0.9.13

      Antenna是基于Apache Ant的扩展,它允许开发者通过Ant构建文件更方便地管理、编译和打包J2ME项目。在Eclipse这样的集成开发环境中,虽然不是所有配置都必须包含Antenna的JAR文件,但其提供的功能对于提升J2ME应用的...

      嵌入式开发j2me编程环境

      【嵌入式开发J2ME编程环境】搭建详解 ...随着对J2ME的深入学习,你还可以配置更多高级功能,如Antenna(用于打包和发布)和混淆器,进一步优化你的开发流程。记住,不断实践和学习是提升技能的关键。

      antenna-src-1.1.0-beta.zip

      标签"antenna-src-1.1.0-beta.zip"与标题一致,进一步确认了这个压缩包的内容是Antenna的源代码,版本号为1.1.0的测试版本,意味着它可能还在开发阶段,供开发者测试和反馈问题。 在压缩包的文件名称列表中,我们...

      Eclipse3.1.1+EclipseME1.5+WTK2.2搭建J2ME开发环境

      例如,了解如何利用Antenna JAR编写打包脚本,以及如何更有效地使用Proguard混淆器来优化你的J2ME项目。 通过这个简化的教程,你应该能够快速上手J2ME开发,利用EclipseME的强大功能,提高开发效率。随着你对...

      关于J2ME 3D的编程

      4. 如果需要使用Antenna(用于打包和发布的工具)和混淆器,可以在`Preferences`中进行配置。 5. 创建一个新的J2ME项目。在`File` -&gt; `New` -&gt; `Other` -&gt; `J2ME` -&gt; `J2ME Modlet Suite`中设置项目名称,如...

      使用Ant和Antenna开发MIDP应用程序

      Antenna是Ant的扩展,专为MIDP应用设计,提供了一系列与J2ME/MIDP相关的任务,如编译CLDC/MIDP代码、创建JAR文件、签署和打包CAB文件(对于Windows Mobile)。Antenna简化了MIDP开发的构建流程,使得开发者可以专注...

      antenna-bin-0.9.13

      antenna是ant的扩展包,它是专用来构建、编译、打包、部署J2ME应用的辅助工具版本0.9.13

      iuhyiuhkjh908u0980

      11. **J2ME打包**:讨论了使用Antenna进行J2ME应用的打包,Antenna是用于J2ME开发的构建工具,处理不同设备的适配问题。 12. **Android应用构建**:使用Ant也可以构建和打包Android应用程序,通过特定的构建脚本...

      手机开发环境配置.doc

      EclipseME的功能包括支持多个无线工具包、MIDlet项目创建、MIDlet编辑、JAD编辑、预验证、模拟器支持、调试、JAR打包、混淆JAR打包、空中部署测试服务器、Antenna构建文件导出以及自动化MIDlet签名等。开发者可以从...

      Eclipse3.3+Eclipseme1.7.6+wtk2.5.2 配置JAVA ME开发环境

      6. **使用Antenna JAR**:Antenna JAR允许你通过编写Ant脚本来自动化J2ME项目的构建过程。虽然不是必须的,但它可以极大地简化打包和部署流程。如果你打算使用Ant,你需要在EclipseME的设置中指定Antenna JAR的位置...

      JAVA手机开发环境搭建

      - 导出Antenna构建文件(Export Antenna build files) - 自动化中间件签名(Automated MIDlet signing) #### 工具准备 为了搭建JAVA手机开发环境,除了Eclipse和EclipseME外,还需要以下工具: - JDK 1.4.2:...

    Global site tag (gtag.js) - Google Analytics