相信很多朋友都有过这样的经理,不小心把eclipse的一个j2me项目中的
verified/classes目录中的东东删除了。之后才发现eclipse再也不会在这个目录
中生成class了,这下子就可纳闷了。
eclipse为何不是跟netbeans那样用ant来编译、运行j2me的项目呢?我近期都
在研究ant,城市用了2小时做了个比较完善的ant脚本可以来弥补一下eclipse对我
心情的打击了。
下面我把这个脚本和源程序(含demo)贡献出来,大家一起研究探讨。
完成以下功能:
1.建立基本目录框架
2.编译src目录中的源文件
3.调用preverify.exe对类文件进行验证
4.将类文件生成jar包
5.调用proguard类对jar包进行混淆,并解压缩
6.将经过混淆、解压缩后的类、资源文件生成jar包,复制src目录中的jad文
件,完成程序部署
7.调用emulator运行程序
用法:
只需要修改一下CONF.properties文件中的属性:
1.midp.lib.dir-WTK的lib目录路径(位于CONF.properties文件中)
2.midp.lib.path-根据需要扩展使用的jar(位于CONF.properties文件中)
3.programName-生成jar/jad文件的名字
在本脚本中可修改的地方:
preverify.exe和emulator.exe的具体参数可以根据需要修改。
注意:
1.src目录中需要有MANIFEST.MF和${programName}.jar文件,这些将用在生成
jar和部署程序时.
2.res目录中放置使用的png图片文件.
附加类库:
混淆器类Proguard-位于lib中。
文件说明:
CONF.properties:配置属性文件
GEN.properties:生成MANIFEST.MF和${programName}.jad文件的替换属性文件
JAD.tmp:生成jad文件用到的替换模板文件
MANIFEST.tmp:生成MANIFEST.MF文件用到的替换模板文件
<?xml version="1.0" encoding="GBK"?>
<project name="automake" default="end" basedir=".">
<property file="CONF.properties"/>
<property name="src.dir" value="${basedir}\src"/>
<property name="res.dir" value="${basedir}\res"/>
<property name="build.dir" value="${basedir}\build"/>
<property name="deploy.dir" value="${basedir}\deploy"/>
<property name="package.dir" value="${basedir}\package"/>
<property name="package.extract.dir" value="${package.dir}
\extract"/>
<property name="preverified.dir" value="${basedir}\preverified"/>
<property name="preverified.noObfusedClass.dir"
value="${preverified.dir}\noObfused\classes"/>
<property name="preverified.obfusedClass.dir"
value="${preverified.dir}\obfused\classes"/>
<property name="preverify.bin" value="${wtk.home.dir}
\bin\preverify.exe"/>
<property name="emulator.bin" value="${wtk.home.dir}
\bin\emulator.exe"/>
<property name="proguard.lib.dir" value="${basedir}\lib"/>
<property name="jad.file" value="${programName}.jad"/>
<target name="init" description="初始化环境">
<echo message="初始化目录"/>
<delete dir="${build.dir}"/>
<delete dir="${deploy.dir}"/>
<delete dir="${package.dir}"/>
<delete dir="${preverified.dir}"/>
<mkdir dir="${build.dir}"/>
<mkdir dir="${deploy.dir}"/>
<mkdir dir="${package.dir}"/>
<mkdir dir="${package.extract.dir}"/>
<mkdir dir="${preverified.dir}"/>
<mkdir dir="${preverified.noObfusedClass.dir}"/>
<mkdir dir="${preverified.obfusedClass.dir}"/>
</target>
<target name="complie" depends="init" description="编译">
<echo message="编译程序"/>
<javac srcdir="${src.dir}" destdir="${build.dir}">
<bootclasspath path="${midp.lib.dir}"/>
<classpath>
<fileset dir="${midp.lib.dir}" includes="*.jar"/>
</classpath>
</javac>
</target>
<target name="verifyForNoObfuscate" description="验证j2me的class,将
验证后的class输出到${preverified.noObfusedClass.dir}">
<echo message="验证生成的class,将验证后的class输出到
${preverified.noObfusedClass.dir}"/>
<exec executable="${preverify.bin}" searchpath="false">
<arg line="-classpath ${midp.lib.path}"/>
<arg line="-d ${preverified.noObfusedClass.dir}"/>
<arg line="${build.dir}"/>
</exec>
</target>
<target name="genManifest" description="根据模板属性文件的值生成
Manifest文件">
<echo message="根据模板属性文件的值生成Manifest文件"/>
<!--
使用${programName}替换掉属性文件GEN.properties中的@PROGRAMNAME@
-->
<replace file="GEN.properties"
token="@PROGRAMNAME@"
value="${programName}"
/>
<!--
使用GEN.properties文件中的属性值替换掉模板文件MANIFEST.tmp中的对应属
性值,
将替换后的数据复制到${src.dir}\MANIFEST.MF
-->
<copy file="MANIFEST.tmp"
tofile="${src.dir}\MANIFEST.MF">
<filterset begintoken="@" endtoken="@">
<filtersfile file="GEN.properties"/>
</filterset>
</copy>
</target>
<target name="package" description="将class打包,输出到
${package.dir}">
<echo message="将class打包,输出到${package.dir}"/>
<jar basedir="${preverified.noObfusedClass.dir}"
jarfile="${package.dir}\${programName}-noObfused.jar"
manifest="${src.dir}\MANIFEST.MF" >
<fileset dir="${res.dir}" includes="**/*.png"/>
</jar>
</target>
<target name="obfuscate" description="对打包后的jar文件进行混淆,然后
解压缩至${package.extract.dir}"> <echo message="对打包后的jar文件进
行混淆,然后解压缩至${package.extract.dir}"/>
<java fork="true" classname="proguard.ProGuard">
<classpath path="${proguard.lib.dir}\proguard.jar"/>
<arg line="-libraryjars ${midp.lib.path}"/>
<arg line="-injar ${package.dir}\${programName}-noObfused.jar"/>
<arg line="-outjar ${package.dir}\${programName}-obfused.jar"/>
<!--保留MIDlet的类声明不被混淆-->
<arg line="-keep 'public class * extends
javax.microedition.midlet.MIDlet'"/>
<!--打印被保留的类名-->
<arg line="-printseeds"/>
</java>
<unjar src="${package.dir}\${programName}-obfused.jar"
dest="${package.extract.dir}" />
</target>
<target name="verifyForObfuscate" description="验证被混淆的class,输
出到${preverified.obfusedClass.dir}">
<echo message="验证被混淆的class,输出到
${preverified.obfusedClass.dir}"/> <exec
executable="${preverify.bin}" searchpath="false">
<arg line="-classpath ${midp.lib.path}"/>
<arg line="-d ${preverified.obfusedClass.dir}"/>
<arg line="${package.extract.dir}"/>
</exec>
<copy todir="${preverified.obfusedClass.dir}">
<fileset dir="${package.extract.dir}" includes="**/*.png"/>
</copy>
</target>
<target name="deploy" description="将经过验证的混淆后的class打包,部
署在delpoy目录">
<echo message="将经过验证的混淆后的class打包,部署在${deploy.dir}目
录"/>
<jar basedir="${preverified.obfusedClass.dir}"
jarfile="${deploy.dir}\${programName}.jar"
manifest="${src.dir}\MANIFEST.MF"
>
<fileset dir="${preverified.obfusedClass.dir}"
includes="**/*.class;*.png"/>
</jar>
</target>
<target name="genJad" description="在${deploy.dir}目录生成JAD文件">
<echo message="在${deploy.dir}目录生成JAD文件"/>
<length file="${deploy.dir}\${programName}.jar" property="jarsize"/>
<echo message="获得jar文件长度:${jarsize}"/>
<replace file="GEN.properties"
token="@JARSIZE@"
value="${jarsize}"
/>
<replace file="GEN.properties"
token="@PROGRAMNAME@"
value="${programName}"
/>
<copy file="JAD.tmp" tofile="${deploy.dir}\${programName}.jad">
<filterset begintoken="@" endtoken="@">
<filtersfile file="GEN.properties"/>
</filterset>
</copy>
</target>
分享到:
相关推荐
在“用ant编译J2ME代码的build.xml模板”中,我们可能会看到类似`clean`、`compile`、`jar`这样的目标,分别对应清理、编译和打包的操作。 `clean`目标通常用于删除先前生成的临时或输出文件,以确保每次构建都是...
在"描述"中,"Eclipse3.5.2中文包+J2ME插件"的组合意味着用户可以同时获得Eclipse的中文界面和J2ME开发工具,为Java移动开发提供了一个完整的本地化环境。 "site.xml"文件在Eclipse插件安装中扮演着重要的角色。它...
j2me开发的坦克3d源代码开发工具eclipse 3.1,提供给爱好j2me的朋友
总结,调试J2ME应用程序在Eclipse中是一个相对直观的过程,需要正确配置J2ME环境,编写和理解MIDlet生命周期,以及充分利用Eclipse的调试工具。通过上述步骤和基础知识,开发者可以更有效地定位和解决问题,从而提高...
Eclipse开发J2ME程序之安装配置
以下是如何在Eclipse中配置J2ME开发环境的详细步骤,以及一个简单的"HelloWorld"案例。 首先,你需要确保已经安装了Eclipse IDE。如果尚未安装,可以从Eclipse官方网站下载适用于Java开发的版本。安装完成后,启动...
eclipseme.feature_1.7.9_site.zip 导入的网址 博文链接:https://chenchuxin.iteye.com/blog/189134
在eclipse中怎样使用j2me 在eclipse中怎样使用j2me 在eclipse中怎样使用j2me
1. **通过Eclipse Marketplace**:在Eclipse中,选择“Help” > “Eclipse Marketplace”,在搜索框中输入“MDDT”或“J2ME”,找到“Mobile and Device Development Tools”后点击“Install”。 2. **通过Update ...
在 Eclipse 中,选择“文件”>“新建”>“其他”>“J2ME”>“MIDlet”来创建新的 J2ME 应用程序。 - 编写代码,使用 EclipseME 提供的工具进行编译、测试和打包。 通过以上步骤,一个完整的 J2ME 开发环境就建立...
- 在Eclipse中,使用新项目向导创建一个J2ME项目,选择适当的配置,如CLDC(Connected Limited Device Configuration)和MIDP(Mobile Information Device Profile)。 - 创建源代码目录结构,如src/main/java,...
- 在Eclipse中选择Window -> Preferences -> J2ME -> Packaging -> Obfuscation,配置混淆器的路径。 - 配置完成后,可以在项目设置中启用混淆选项,以提高代码的安全性。 #### 六、总结 以上就是关于在Eclipse...
6. **部署和运行J2ME程序**:在Eclipse中,右键点击源代码文件(如FrmMain.java),选择“Debug As”->“Emulated J2ME Midlet”来运行模拟器。J2ME程序可以在Sun公司的模拟器上运行,也可以发布到特定设备的模拟器...
j2me 环境搭建 eclipse Eclipse j2me j2me 环境搭建 eclipse Eclipse j2me j2me 环境搭建 eclipse Eclipse j2me j2me 环境搭建 eclipse Eclipse j2me
本文详细介绍了如何在 Eclipse 中配置 J2ME 开发环境,包括 Eclipse 3.2.2、EclipseME 1.6.7 和 WTK 2.5 的安装与配置步骤,以及创建和调试 HelloWorld 示例的方法。此外,还提供了使用 Nokia 仿真器的指导。通过...
2. **项目设置**:在Eclipse中创建一个新的j2ME项目,需要指定项目类型(如MIDlet Suite),并配置项目的构建路径,包括导入必要的j2ME库。 3. **编写代码**:j2ME应用程序主要由MIDlets组成,它们是运行在j2ME设备...
为了在Eclipse中更好地支持J2ME开发,需要安装插件,比如MobiOne Studio或J2ME Polish。这些插件提供了图形化界面和自动化构建工具。你可以通过Eclipse的内置Marketplace搜索并安装。 ### 7. 创建J2ME项目 在...
在实际应用中,J2ME反编译重命名助手可能用于以下几个场景: - 开发者调试已发布的J2ME应用,查找bug或优化性能。 - 教育目的,让学生能够学习和理解已编译的J2ME代码。 - 安全分析,检查应用是否存在恶意行为或漏洞...
在Eclipse中,你可以使用这个文件来添加新的软件站点,从而通过Eclipse的内置更新管理器来安装或更新插件。 3. **features** 和 **plugins** 目录: 这两个目录分别包含了Eclipse插件的特征(features)和插件...
在Eclipse中,可以通过“Help” > “Install New Software”来添加J2ME插件,例如WTK Plugin或NetBeans插件,它们能提供J2ME项目的支持。 **二、创建J2ME项目** 在Eclipse中,你可以通过“File” > “New” > ...