今天是比較郁悶的一天,一不小心把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>
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月