网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > J2ME > 核心技术 > Antenna与j2me打包详细介绍  

Antenna与j2me打包详细介绍

2007-10-19  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

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

  Antenna介绍

网管网www.bitscn.com

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

网管u家bitscn.net

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

网管有家bitscn.net

  Antenna中的预处理 网管u家www.bitscn.net

  中的预处理原来与j2mepolish等支持预处理的软件一致,都是在编译之前,对代码中定义的预处理脚本进行处理,并生成符合脚本定义规则的代码。

中国网管论坛bbs.bitsCN.com

  在antenna中,通过“wtkpreprocess”task来进行预处理。关于预处理脚本的定义,请参考antenna自带doc中的wtkpreprocess.html.此外,本文讨论的preprocessor是指新版的preprocessor,即version=2,原来的预处理机制不在本文讨论范围之内。 网管下载dl.bitscn.com

  下面举例说明,如何通过在代码中定义脚本获取终端相关信息,类似于《使用J2mePolish的build和preprocess功能》一文中的例子,感兴趣的朋友可以结合起来学习。 网管u家bitscn.net

  Task定义如下: 网管u家www.bitscn.net

  xml 代码

网管网www_bitscn_com

  <wtkpreprocess verbose="true" version="2" srcdir="${dir.src}" destdir="${dir.dist}"

网管u家bitscn.net

  device="Nokia/6600" printsymbols="true" />

中国网管论坛bbs.bitsCN.com

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

  源代码片断:

网管有家www.bitscn.net

  java 代码

网管联盟bitsCN@com

  public class MyCanvas

网管u家u.bitscn@com

  //#if 'nokia-ui'@JavaPackage

网管联盟bitsCN_com

  //# extends com.nokia.mid.ui.FullCanvas

网管联盟bitsCN_com

  //#else

网管u家u.bitsCN.com

  extends Canvas

网管u家u.bitscn@com

  //#endif 网管联盟bitsCN@com

  { 网管u家bitscn.net

  //#ifdef key.LeftSoftKey 网管u家www.bitscn.net

  //#expand public final static int KEY_SOFT_LEFT = %key.LeftSoftKey%;

中国网管联盟bitsCN.com

  //#else 网管u家bitscn.net

  public final static int KEY_SOFT_LEFT = 6; 网管u家www.bitscn.net

  //#endif 网管朋友网www_bitscn_net

  //#ifdef key.RightSoftKey 中国网管联盟bitsCN.com

  //#expand public final static int KEY_SOFT_RIGHT = %key.RightSoftKey%; 网管有家bitscn.net

  //#else 网管联盟bitsCN_com

  public final static int KEY_SOFT_RIGHT = 7; 网管有家bitscn.net

  //#endif 网管bitscn_com

  int screenWidth = getWidth(); 网管bitscn_com

  int screenHeight = getHeight(); 网管论坛bbs_bitsCN_com

  public MyCanvas()

网管有家www.bitscn.net

  {

网管朋友网www_bitscn_net

  //      #if !('nokia-ui'@JavaPackage网管u家u.bitscn@com

  //# setFullScreenMode(true); 网管论坛bbs_bitsCN_com

  //#endif

网管下载dl.bitscn.com

  } 网管网www_bitscn_com

  protected void paint (Graphics g) 网管u家www.bitscn.net

  {

网管有家bitscn.net

  //#ifdef ScreenSize

网管网www_bitscn_com

  //#expand String screensize = "%ScreenSize%"; 网管网www.bitscn.com

  //#else 中国网管论坛bbs.bitsCN.com

  String screensize = "128x128"; 网管联盟bitsCN_com

  //#endif

网管网www_bitscn_com

  g.setColor(0); 网管u家u.bitsCN.com

  g.fillRect(0, 0, screenWidth, screenHeight);

网管朋友网www_bitscn_net

  g.setColor(255,255,255);

网管网www.bitscn.com

  g.drawString(screensize, screenWidth/2, screenHeight/2, 0);

网管u家u.bitscn@com

  } 网管u家bitscn.net

  }

网管bitscn_com

  如此一来,就可以通过antenna中的预处理机制,解决多机型之间,键值不同,屏幕大小不同,扩展API不同等问题。 网管有家www.bitscn.net

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

  目录结构定义 网管联盟bitsCN@com

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

网管论坛bbs_bitsCN_com

  src ——源码目录

网管有家www.bitscn.net

  res——资源目录

网管u家u.bitscn@com

  build

网管下载dl.bitscn.com

  —— 编译后的class文件以及从res复制过来的资源文件 网管下载dl.bitscn.com

  ——jar和jad文件

网管有家bitscn.net

  dist——预处理后的java文件 网管有家bitscn.net

  Ant脚本 中国网管联盟bitsCN.com

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

网管网www.bitscn.com

  xml 代码 网管朋友网www_bitscn_net

  <target name="init" description="变量定义"> 网管u家www.bitscn.net

  <echo message="Define variable" /> 网管论坛bbs_bitsCN_com

  <!—— 相关变量定义 ——> 网管网www_bitscn_com

  <property name="basedir" value="." />

网管论坛bbs_bitsCN_com

  <property name="midlet.version" value="1.0" /> 网管u家u.bitsCN.com

  <property name="jad.filename" value="AntennaApp" />

网管网www.bitscn.com

  <property name="jar.filename" value="${jad.filename}" /> 网管u家www.bitscn.net

  <property name="wtk.proguard.home" value="E:\Develpment\proguard3.9"/> 网管u家bitscn.net

  <!—— 目录结构定义 ——> 网管网www_bitscn_com

  <property name="dir.src" value="src" />

网管论坛bbs_bitsCN_com

  <property name="dir.res" value="res" />

网管bitscn_com

  <property name="dir.output" value="${basedir}/build" /> 网管下载dl.bitscn.com

  <property name="dir.dist" value="${basedir}/dist" /> 网管有家bitscn.net

  <property name="dir.classes" value="${dir.output}/classes" /> 中国网管联盟bitsCN.com

  <property name="dir.deployed" value="${dir.output}/deployed" />

网管有家bitscn.net

  <property name="wtk.home" value="E:\Develpment\SDK\WTK25" />

网管u家www.bitscn.net

  <property name="wtk.cldc.version" value="1.0" />

网管网www_bitscn_com

  <property name="wtk.midp.version" value="2.0" /> 网管u家www.bitscn.net

  <property name="wtk.wma.enabled" value="false" /> 网管下载dl.bitscn.com

  <property name="wtk.debug" value="false" />

网管论坛bbs_bitsCN_com

  <property name="wtk.obfuscate" value="true" /> 网管论坛bbs_bitsCN_com

  <!—— JAD相关属性定义——>

网管朋友网www_bitscn_net

  <property name="jad.midlet-name" value="AntennaApp" /> 网管bitscn_com

  <property name="jad.midlet-vender" value="org" /> 网管网www.bitscn.com

  <property name="jad.midlet-version" value="1.0.0" />

网管联盟bitsCN@com

  <!——Midlet相关定义——>

网管有家www.bitscn.net

  <property name="jad.midlet-class" value="MyMIDlet" /> 网管u家www.bitscn.net

  <property name="jad.midlet-icon" value="" /> 网管网www_bitscn_com

  <!——发布——>

网管有家www.bitscn.net

  <property name="deploy.target" value="http://localhost:8080/deployer" />

网管网www.bitscn.com

  <property name="deploy.login" value="admin" /> 网管u家bitscn.net

  <property name="deploy.password" value="admin" /> 网管论坛bbs_bitsCN_com

  <!——</span——>target>

网管下载dl.bitscn.com

  <target name="clean" depends="init" description="初始化环境"> 网管论坛bbs_bitsCN_com

  <echo message="Clean dir" /> 网管联盟bitsCN_com

  <delete dir="${dir.output}" />

网管bitscn_com

  <!——</span——>target> 中国网管论坛bbs.bitsCN.com

  <target name="preprocess" depends="init,clean" description="预处理">

中国网管联盟bitsCN.com

  <echo message="preprocess" /> 网管论坛bbs_bitsCN_com

  <mkdir dir="${dir.dist}" />

中国网管联盟bitsCN.com

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

网管联盟bitsCN@com

  <!——</span——>target> 网管联盟bitsCN_com

  <target name="compile" depends="preprocess" description="编译">

网管有家bitscn.net

  <echo>Starting compile<!——</span——>echo> 网管u家www.bitscn.net

  <mkdir dir="${dir.classes}" /> 网管u家u.bitscn@com

  <echo>build from all the ${dir.src} to ${dir.classes}<!——</span——>echo> 网管u家bitscn.net

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

中国网管论坛bbs.bitsCN.com

  <!——</span——>wtkbuild>

网管网www.bitscn.com

  <!——</span——>target>

网管朋友网www_bitscn_net

  <target name="build" depends="compile" description="生成">

网管有家bitscn.net

  <echo message="Packaging library"/> 网管联盟bitsCN_com

  <copy todir="${dir.classes}/res">

网管bitscn_com

  <fileset dir="${dir.res}" includes="*.png" />

网管网www.bitscn.com

  <fileset dir="${dir.res}" includes="*.properties" /> 网管联盟bitsCN_com

  <fileset dir="${dir.res}" includes="*.midi" /> 网管有家bitscn.net

  <!——</span——>copy>

网管u家bitscn.net

  <mkdir dir="${dir.deployed}" /> 网管下载dl.bitscn.com

  <wtkjad jadfile="${dir.deployed}/${jad.filename}.jad"

网管有家bitscn.net

  jarfile="${dir.deployed}/${jar.filename}.jar" 网管论坛bbs_bitsCN_com

  name="${jad.midlet-name}"

网管网www_bitscn_com

  vendor="${jad.midlet-vender}" 中国网管论坛bbs.bitsCN.com

  version="${jad.midlet-version}">

网管网www_bitscn_com

  <midlet name="${jad.midlet-name}"

网管有家bitscn.net

  class="${jad.midlet-class}"

网管网www.bitscn.com

  icon="${jad.midlet-icon}"/>

中国网管论坛bbs.bitsCN.com

  <attribute name="MIDlet-Icon"            value="${jad.midlet-icon}" /> 网管联盟bitsCN@com

  <attribute name="MIDlet-Permissions"     value="${jad.midlet-permissions}"/>

网管联盟bitsCN_com

  <attribute name="MicroEdition-Configuration"     value="CLDC-1.0"/>

网管网www_bitscn_com

  <attribute name="MicroEdition-Profile"     value="MIDP-2.0"/>

网管下载dl.bitscn.com

  <!——</span——>wtkjad> 网管联盟bitsCN@com

  <wtkpackage jarfile="${dir.deployed}/${jar.filename}.jar"

网管论坛bbs_bitsCN_com

  jadfile="${dir.deployed}/${jad.filename}.jad" 网管朋友网www_bitscn_net

  obfuscate="${wtk.obfuscate}"

网管u家bitscn.net

  preverify="true" classpath="E:\Develpment\wtk100\lib\nokiaui.zip"> 网管网www_bitscn_com

  <fileset dir="${dir.classes}"/>

网管论坛bbs_bitsCN_com

  <!——</span——>wtkpackage>

中国网管联盟bitsCN.com

  <!——</span——>target> 网管bitscn_com

  注意:如果是在Eclipse中使用ant 来运行build.xml,请注意ant_home路径的设置,且确认ant_home\bin目录下存在antenna包。

网管网www.bitscn.com

TAGs   介绍   详细   name   value   property   处理   定义   antenna   dir      
 上一篇:Java有能力抵挡LAMP的进攻吗?   下一篇:深入了解J2ME配置层所扮演的角色
Antenna与j2me打包详细介绍 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: