`
pandonix
  • 浏览: 399791 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Antenna与j2me打包

    博客分类:
  • J2ME
阅读更多
Antennaj2me打包 

众所周知,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中的预处理

         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  
  15.     //#expand public final static int KEY_SOFT_RIGHT = %key.RightSoftKey%;  
  16.     //#else  
  17.     public final static int KEY_SOFT_RIGHT = 7;  
  18.     //#endif  
  19.       
  20.     int screenWidth = getWidth();  
  21.     int screenHeight = getHeight();  
  22.       
  23.     public MyCanvas()  
  24.     {  
  25. //      #if !('nokia-ui'@JavaPackage)  
  26.         //# setFullScreenMode(true);  
  27.         //#endif  
  28.     }  
  29.       
  30.     protected void paint (Graphics g)  
  31.     {  
  32.          
  33.         //#ifdef ScreenSize  
  34.         //#expand String screensize = "%ScreenSize%";  
  35.         //#else  
  36.         String screensize = "128x128";  
  37.         //#endif  
  38.              
  39.         g.setColor(0);  
  40.         g.fillRect(00, screenWidth, screenHeight);  
  41.         g.setColor(255,255,255);  
  42.         g.drawString(screensize, screenWidth/2, screenHeight/20);  
  43.     }  
  44. }  

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

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

 目录结构定义

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

src ——源码目录

res——资源目录

build

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

    --deployed——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.     <!---->  
  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.     <!---->  
  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. <!---->target>  
  41.   
  42. <target name="clean" depends="init" description="初始化环境">  
  43.     <echo message="Clean dir" />  
  44.     <delete dir="${dir.output}" />  
  45. <!---->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. <!---->target>  
  54.   
  55. <target name="compile" depends="preprocess" description="编译">  
  56.     <echo>Starting compile<!---->echo>  
  57.     <mkdir dir="${dir.classes}" />  
  58.   
  59.     <echo>build from all the ${dir.src} to ${dir.classes}<!---->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.     <!---->wtkbuild>  
  63.   
  64. <!---->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.        <!---->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.        <!---->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.        <!---->wtkpackage>  
  99. <!---->target>  

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

apache-ant-1.7.0

antenna-bin-0.9.15-beta.jar

jdk1.5

eclipse3.2

 参考文章

J2ME Antenna 入门 作者:redduke1202

地址:http://community.csdn.net/Expert/TopicView3.asp?id=5298691  

 

Using_Ant_and_Antenna_MIDP Nokia文档

 

j2me build.xml例子》 作者:Peter

地址:http://hi.baidu.com/wapeter/blog/item/3beb9f2268f571f2d6cae2d2.html

  • build.rar (1.4 KB)
  • 描述: buidl.xml文件
  • 下载次数: 253
分享到:
评论
9 楼 pandonix 2007-10-19  
不需要安装antenna插件,你只需要在Eclipse中使用ant,然后在ant_home\lib中加入antenna的包,目前,我使用的版本是:antenna-bin-0.9.15-beta.jar.然后再Eclipse中的Windows->Prefences->ant里面重新配置一下ant_home
这些在我文章里面都有介绍,可以再参考一下其它几篇关于ant、j2mepolish相关的文章
8 楼 mingkg21 2007-10-17  
请教pandonix

怎么在ECLIPSE里使用ANTENNA的device.xml,我已经安装了ANTENNA的插件,可以详细点吗
7 楼 pandonix 2007-10-13  
回zjq842999
你也可以使用j2mepolish里的device.xml,除了该数据文件,还有很多其他有用的配置文件,建议看看我的另外一篇关于j2mepolish的文章   
6 楼 pandonix 2007-10-13  
如果是在Eclipse中使用ant 来运行build.xml,请注意ant_home路径的设置,且确认ant_home\bin目录下存在antenna包。
5 楼 mingkg21 2007-10-12  
eclipse里怎么用antenna,怎么弄使用预编译时不应该是错误提示。
4 楼 redduke1202 2007-10-12  
设备配置文件,这个过程由预处理程序完成
在antenna的包里,文件名为 device.xml
3 楼 zjq842999 2007-10-11  
请问下 %key.LeftSoftKey%这个值是读外部的配置文件还是读哪里的数据?
2 楼 mingkg21 2007-10-09  
antenna v2??
1 楼 redduke1202 2007-10-08  
非常不错,最近antenna v2的预处理真是好的很

相关推荐

    ansys maxwell

    ansys maxwell

    matlab基于不确定性可达性优化的自主鲁棒操作.zip

    matlab基于不确定性可达性优化的自主鲁棒操作.zip

    pytest-2.8.0.zip

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    信息安全课程实验C++实现DES等算法源代码

    信息安全课程实验C++实现DES等算法源代码

    基于知识图谱的医疗诊断知识问答系统python源码+项目说明.zip

    环境 python >= 3.6 pyahocorasick==1.4.2 requests==2.25.1 gevent==1.4.0 jieba==0.42.1 six==1.15.0 gensim==3.8.3 matplotlib==3.1.3 Flask==1.1.1 numpy==1.16.0 bert4keras==0.9.1 tensorflow==1.14.0 Keras==2.3.1 py2neo==2020.1.1 tqdm==4.42.1 pandas==1.0.1 termcolor==1.1.0 itchat==1.3.10 ahocorasick==0.9 flask_compress==1.9.0 flask_cors==3.0.10 flask_json==0.3.4 GPUtil==1.4.0 pyzmq==22.0.3 scikit_learn==0.24.1 效果展示 为能最简化使用该系统,不需要繁杂的部署各种七七八八的东西,当前版本使用的itchat将问答功能集成到微信做演示,这需要你的微信能登入网页微信才能使用itchat;另外对话上下文并没

    一个高品质的音乐共享和流媒体轻量音乐程序网站在线音乐源码

    一个高品质的音乐共享和流媒体轻量音乐程序网站在线音乐源码,是创建您自己的音乐流媒体网站的最佳方式! 最新版本: 添加插件系统,现在开发人员可以为程序制作插件并在更新后保留您的自定义设置。 固定的2 个以上的小错误。 安装所需:nginx/apache,mysql5.6+,php7+ 搭建说明:看源码内详细说明

    实现的金融风控贷款违约预测python源码.zip

    实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip

    麦肯锡—xx数码公司发展战略咨询报告.ppt

    麦肯锡—xx数码公司发展战略咨询报告.ppt

    FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

    FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写

    基于sklearn实现线性回归模型对波士顿房价进行预测源码.zip

    基于sklearn实现线性回归模型对波士顿房价进行预测源码.zip

    pytest-3.5.0.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pytest-4.5.0.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于相干衍射成像模拟的matlab源码.zip

    基于相干衍射成像模拟的matlab源码.zip

    基于CS的远程监控系统软件项目(免费提供全套java开源项目源码+论文)

    项目介绍 背景 在当今的数字化时代,远程监控系统已经成为企业和个人必不可少的工具。随着物联网(IoT)技术的发展,监控系统的需求不断增加,不仅仅局限于视频监控,还包括数据监控、设备状态监控等。基于CS(Client-Server)架构的远程监控系统应运而生,旨在提供高效、实时、可靠的监控服务,帮助用户实现远程管理和控制。 目的 基于CS的远程监控系统软件项目旨在为用户提供一个综合性的监控平台,通过该平台,用户可以实时监控各类设备和数据,实现远程控制和管理,提高工作效率,降低运营成本。同时,该系统还可以用于安全防护、生产过程监控等多种场景,具有广泛的应用前景。 模块说明 前端模块 前端模块是用户与系统交互的界面,负责展示监控数据和接收用户指令。前端模块的主要功能包括: 用户登录与认证:通过安全的登录机制,确保只有授权用户才能访问系统。 实时数据展示:以图表、仪表盘等形式展示实时监控数据,包括视频流、传感器数据等。 报警通知:当监控系统检测到异常情况时,前端模块会通过弹窗、声音等方式通知用户。 远程控制:用户可以通过前端界面对设备进行远程控制,例如开关设备、调整参数等。

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    matlab基于标签歧义的深度标签分布学习.zip

    matlab基于标签歧义的深度标签分布学习.zip

    九型人格测试题.144题dr.xls

    九型人格测试题.144题dr.xls

    麦肯锡—xx科技业务流程改造报告.ppt

    麦肯锡—xx科技业务流程改造报告.ppt

    pytest-8.2.0-py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    1-8.py

    1-8

Global site tag (gtag.js) - Google Analytics