服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

在eclipse中使用ant来自动编译j2me程序


  今天是比较郁闷的一天,一不小心把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="http://www.itus.cn**/*.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="http://www.itus.cn**/*.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="http://www.itus.cn**/*.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>

扫描关注微信公众号