Android学习之Build.xml文件

2 篇文章 0 订阅

转自: http://blog.csdn.net/cockroach/article/details/6728337


近日升级Android SDK至3.2版本,发现ant工具编译失败,仔细检查Build.xml后进行了重新编写,内容修正如下,希望对大家学习Ant有帮助。具体Build.xml内容如下:

具体演示工程参见:点击打开链接,注意积分有点高哦,嘿嘿。。。



[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--  
  3.     参考文章:  
  4.     http://www.cnblogs.com/zuolongsnail/archive/2011/05/25/2058210.html  
  5.     http://haya.iteye.com/?show_full=true  
  6.     http://jojol-zhou.iteye.com/blog/729271  
  7.     http://jojol-zhou.iteye.com/blog/729254  
  8.     http://www.cnblogs.com/Pickuper/archive/2011/6/14.html  
  9.     http://www.51testing.com/?uid-213912-action-viewspace-itemid-235086  
  10.     http://jimmy-duan.iteye.com/blog/1057967  
  11.     命名原则:  
  12.     (1)使用"."替代local.properties文件中的"-"作为文件分隔符  
  13.     (2)前缀:  
  14.                     使用"jar"表示包  
  15.                     使用"tools"表示工具  
  16.                     使用"in"表示输入  
  17.                     使用"out"表示输出  
  18.                     使用"release"表示产品  
  19.     (3)后缀:使用"dir"表示目录,"file"表示文件  
  20.     (3)使用"absolute"表示绝对路径,未使用"absolute"的表示相对路径,所有路径实际使用前转换为绝对路径再使用  
  21.     文件及变量使用:  
  22.     (1)使用到了系统自带的proguard.cfg文件,用于配置混淆设置  
  23.     (2)使用到了系统自带的local.properties文件,用于定义用户设置的本地变量,典型的文件中包含:  
  24.         #SDK路径  
  25.         sdk-dir=D:\\Android\\android-sdk-windows  
  26.         #混淆路径  
  27.         proguard=D:\\Android\\proguard\\lib\\proguard.jar  
  28.         #jarsiger路径  
  29.         jarsigner=D:\\Java\\jdk1.6.0_25\\bin\\jarsigner.exe  
  30.         #签名文件  
  31.         keystore=D:\\Android\\xxxx.keystore  
  32.         keyalias=xxxxx  
  33.         password=xxxxxx  
  34.         #moto SecondaryTelephonyManager jar包  
  35.         secondary-apis-moto-xt882-zip=secondary-apis-moto_xt882.zip  
  36.         secondary-apis-moto-xt800plus-zip=secondary-apis-moto_xt800plus.zip  
  37.         #QAS SDK包  
  38.         appstat-jar=appstat_A1.0.0.7_20110726.jar  
  39.         #资源路径  
  40.         res-dir=res480x320  
  41.         #Manifest文件  
  42.         manifest-file=manifest/AndroidManifest.xml  
  43.         #UA  
  44.         UA=SamsungI569  
  45.         #assets路径  
  46.         assets-dir=assets${UA}  
  47.         #输出路径  
  48.         out-release-dir=E:\\tmp  
  49.         #版本号  
  50.         TYSX_VER=2.1.11.2  
  51.         #android版本  
  52.         android_ver=AD23  
  53.         #文件名  
  54.         #TYSX-机型型号(UA)-版本号-厂商缩写-操作系统缩写  
  55.         release-apk-file=XXXX-${UA}-${TYSX_VER}-MH-${android_ver}.apk     
  56. -->  
  57.   
  58. <!--  
  59.     <project>标签  
  60.     每个构建文件对应一个项目。<project>标签时构建文件的根标签。它可以有多个内在属性,  
  61.     就如代码中所示,其各个属性的含义分别如下。  
  62.     (1) default表示默认的运行目标,这个属性是必须的。  
  63.     (2) basedir表示项目的基准目录。  
  64.     (3) name表示项目名。  
  65.     (4) description表示项目的描述。  
  66.     每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有  
  67.     自己的构建文件。   
  68. -->  
  69. <project name="AntTest" default="release">  
  70.     <!--     指定配置文件      -->  
  71.     <property file="default.properties" />  
  72.     <property file="local.properties" />  
  73.   
  74.     <!--     定义工具目录      -->  
  75.     <property name="sdk.dir" value="${sdk-dir}" />  
  76.     <property name="android.tools.dir" value="${sdk.dir}/tools" />  
  77.     <property name="android.platformtools.dir" value="${sdk.dir}/platform-tools" />  
  78.     <property name="android.platforms.dir" value="${sdk.dir}/platforms/${target}" />  
  79.   
  80.     <property name="android.tools.absolute.dir" location="${android.tools.dir}" />  
  81.     <property name="android.platformtools.absolute.dir" location="${android.platformtools.dir}" />  
  82.     <property name="android.platforms.absolute.dir" location="${android.platforms.dir}" />  
  83.   
  84.     <!--     定义工具          
  85.     <property name="verbose" value="false" />-->  
  86.     <condition property="exe" value=".exe" else="">  
  87.         <os family="windows" />  
  88.     </condition>  
  89.     <property name="jar.proguard" value="${proguard-jar}" />  
  90.     <property name="jar.android" value="${android.platforms.absolute.dir}/android.jar" />  
  91.     <property name="tools.dx" value="${android.platformtools.absolute.dir}/dx.bat" />  
  92.     <property name="tools.apkbuilder" value="${android.tools.absolute.dir}/apkbuilder.bat" />  
  93.     <property name="tools.adb" value="${android.tools.absolute.dir}/adb${exe}" />  
  94.     <property name="tools.zipalign" value="${android.tools.absolute.dir}/zipalign${exe}" />  
  95.     <property name="tools.aapt" value="${android.platformtools.absolute.dir}/aapt${exe}" />  
  96.     <property name="tools.aidl" value="${android.platformtools.absolute.dir}/aidl${exe}" />  
  97.     <property name="tools.jarsigner" value="${JAVA_HOME}/bin/jarsigner${exe}" />  
  98.       
  99.     <!--     定义引入工具库           
  100.     <path id="android.antlibs">  
  101.         <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />  
  102.         <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />  
  103.         <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />  
  104.         <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />  
  105.         <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />  
  106.     </path>  
  107.             定义任务          
  108.     <taskdef name="aaptexec" classname="com.android.ant.AaptExecLoopTask" classpathref="android.antlibs" />  
  109.     <taskdef name="apkbuilder" classname="com.android.ant.ApkBuilderTask" classpathref="android.antlibs" />  
  110.     <taskdef name="xpath" classname="com.android.ant.XPathTask" classpathref="android.antlibs" />  
  111.     -->  
  112.   
  113.     <!--     定义源代码及资源等输入目录       -->  
  114.     <property name="in.source.dir" value="src" />  
  115.     <property name="in.resource.dir" value="${res-dir}" />  
  116.     <property name="in.asset.dir" value="${assets-dir}" />  
  117.   
  118.     <property name="in.source.absolute.dir" location="${in.source.dir}" />  
  119.     <property name="in.resource.absolute.dir" location="${in.resource.dir}" />  
  120.     <property name="in.asset.absolute.dir" location="${in.asset.dir}" />  
  121.   
  122.     <!--     定义本地库/第三方工具库文件目录        -->  
  123.     <property name="in.external.libs.dir" value="libs" />  
  124.     <property name="in.native.libs.dir" value="libs" />  
  125.   
  126.     <property name="in.external.libs.absolute.dir" location="${in.external.libs.dir}" />  
  127.     <property name="in.native.libs.absolute.dir" location="${in.native.libs.dir}" />  
  128.   
  129.     <!--     定义输入文件      -->  
  130.     <property name="in.manifest.file" value="${manifest-file}" />  
  131.     <property name="in.android.aidl.file" value="${android.platforms.dir}/framework.aidl" />  
  132.   
  133.     <property name="in.manifest.absolute.file" location="${in.manifest.file}" />  
  134.     <property name="in.android.aidl.absolute.file" location="${in.android.aidl.file}" />  
  135.   
  136.     <!--     定义输出文件目录    -->  
  137.     <property name="out.gen.dir" value="gen" />  
  138.     <property name="out.dir" value="bin" />  
  139.     <property name="out.classes.dir" value="${out.dir}/classes" />  
  140.   
  141.     <property name="out.gen.absolute.dir" location="${out.gen.dir}" />  
  142.     <property name="out.absolute.dir" location="${out.dir}" />  
  143.     <property name="out.classes.absolute.dir" location="${out.classes.dir}" />  
  144.     <property name="release.absolute.dir" location="${release-dir}" />  
  145.   
  146.     <!--     定义输出文件          -->  
  147.     <property name="out.dex.file" value="${ant.project.name}-classes.dex" />  
  148.     <property name="out.resource.package.file" value="${ant.project.name}-resource.apk" />  
  149.     <property name="out.unsigned.package.file" value="${ant.project.name}-unsigned.apk" />  
  150.     <property name="out.signed.package.file" value="${ant.project.name}-signed.apk" />  
  151.     <property name="out.aligned.package.file" value="${ant.project.name}-aligned.apk" />  
  152.     <property name="release.package.file" value="${release-apk-file}" />  
  153.   
  154.     <property name="out.dex.absolute.file" location="${out.dir}/${out.dex.file}" />  
  155.     <property name="out.resource.package.absolute.file" location="${out.dir}/${out.resource.package.file}" />  
  156.     <property name="out.unsigned.package.absolute.file" location="${out.dir}/${out.unsigned.package.file}" />  
  157.     <property name="out.signed.package.absolute.file" location="${out.dir}/${out.signed.package.file}" />  
  158.     <property name="out.aligned.package.absolute.file" location="${out.dir}/${out.aligned.package.file}" />  
  159.     <property name="release.package.absolute.file" location="${release.absolute.dir}/${release.package.file}" />  
  160.   
  161.   
  162.     <!--  
  163.         <target>标签  
  164.         一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例  
  165.         如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必  
  166.         须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。  
  167.             (1)name表示标明,这个属性是必须的。  
  168.             (2)depends表示依赖的目标。  
  169.             (3)if表示仅当属性设置时才执行。  
  170.             (4)unless表示当属性没有设置时才执行。  
  171.             (5)description表示项目的描述。  
  172.         Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行  
  173.         每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的  
  174.         depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执  
  175.         行的顺序是prepare->compile->run。  
  176.         一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总  
  177.         会被执行。     
  178. -->  
  179.     <target name="-clean">  
  180.         <echo>Creating output directories if needed...</echo>  
  181.         <delete dir="${out.absolute.dir}" />  
  182.         <delete dir="${out.gen.absolute.dir}" />  
  183.     </target>  
  184.   
  185.     <target name="-dirs" depends="-clean">  
  186.         <echo>Creating output directories if needed...</echo>  
  187.         <mkdir dir="${in.resource.absolute.dir}" />  
  188.         <mkdir dir="${in.external.libs.absolute.dir}" />  
  189.         <mkdir dir="${out.gen.absolute.dir}" />  
  190.         <mkdir dir="${out.absolute.dir}" />  
  191.         <mkdir dir="${out.classes.absolute.dir}" />  
  192.     </target>  
  193.   
  194.     <!--  
  195.         第一步 生成R.java类文件:  
  196.         Eclipse中会自动生成R.java,ant和命令行使用android SDK提供的aapt.ext程序生成R.java。  
  197.     -->  
  198.     <target name="-resource-src" depends="-dirs">  
  199.         <echo>Generating R.java / Manifest.java from the resources...</echo>  
  200.         <exec executable="${tools.aapt}" failonerror="true">  
  201.             <arg value="package" />  
  202.             <arg value="-m" />  
  203.             <arg value="-J" />  
  204.             <arg path="${out.gen.absolute.dir}" />  
  205.             <arg value="-M" />  
  206.             <arg path="${in.manifest.absolute.file}" />  
  207.             <arg value="-S" />  
  208.             <arg path="${in.resource.absolute.dir}" />  
  209.             <arg value="-I" />  
  210.             <arg path="${jar.android}" />  
  211.         </exec>  
  212.     </target>  
  213.   
  214.     <!--  
  215.         第二步 将.aidl文件生成.java类文件:  
  216.         Eclipse中自动生成,ant和命令行使用android SDK提供的aidl.exe生成.java文件。   
  217.     -->  
  218.     <!-- Generates java classes from .aidl files. -->  
  219.     <target name="-aidl" depends="-dirs">  
  220.         <echo>Compiling aidl files into Java classes...</echo>  
  221.         <apply executable="${tools.aidl}" failonerror="true">  
  222.             <arg value="-p${in.android.aidl.file}" />  
  223.             <arg value="-I${in.source.absolute.dir}" />  
  224.             <arg value="-o${out.gen.absolute.dir}" />  
  225.             <fileset dir="${in.source.absolute.dir}">  
  226.                 <include name="**/*.aidl" />  
  227.             </fileset>  
  228.         </apply>  
  229.     </target>  
  230.   
  231.     <!--  
  232.         第三步 编译.java类文件生成class文件:  
  233.         Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件。   
  234.          -->  
  235.     <!-- Compiles this project's .java files into .class files. -->  
  236.     <target name="compile" depends="-resource-src, -aidl" >  
  237.         <echo>Compiles project's .java files into .class files</echo>  
  238.         <javac encoding="utf-8" target="1.5" debug="true" extdirs="" srcdir="."   
  239.             destdir="${out.classes.absolute.dir}" bootclasspath="${jar.android}">  
  240.             <classpath>  
  241.                 <fileset dir="${in.external.libs.absolute.dir}" includes="*.jar" />  
  242.                 <fileset dir="${in.external.libs.absolute.dir}" includes="*.zip" />  
  243.             </classpath>  
  244.         </javac>  
  245.     </target>  
  246.   
  247.     <!--Execute proguard class flies-->  
  248.     <target name="optimize" depends="compile">  
  249.         <echo>optimize classes are put to "${out.absolute.dir}"   .</echo>  
  250.         <jar basedir="${out.classes.absolute.dir}" destfile="${out.absolute.dir}/temp.jar"/>  
  251.         <taskdef resource="proguard/ant/task.properties"  classpath="${jar.proguard}" />  
  252.         <proguard>    
  253.             -injars                 ${out.absolute.dir}/temp.jar     
  254.             -outjars                    ${out.absolute.dir}/optimized.jar  
  255.             -libraryjars                ${jar.android}     
  256.             -optimizationpasses 5  
  257.             -dontusemixedcaseclassnames  
  258.             -dontskipnonpubliclibraryclasses  
  259.             -dontpreverify  
  260.             -verbose  
  261.             -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  262.             -include proguard.cfg             
  263.           </proguard>  
  264.         <delete file="${out.absolute.dir}/temp.jar"/>  
  265.         <delete dir="${out.classes.dir}" failonerror="false" />  
  266.         <mkdir dir="${out.classes.dir}"/>  
  267.         <unzip src="${out.absolute.dir}/optimized.jar" dest="${out.classes.absolute.dir}"/>  
  268.         <delete file="${out.absolute.dir}/optimized.jar"/>  
  269.     </target>  
  270.   
  271.     <!--  
  272.         第四步 将class文件打包生成classes.dex文件:  
  273.         Eclipse中自动生成,ant和命令行使用android SDK提供的dx.bat命令行脚本生成classes.dex文件。   
  274.     -->  
  275.     <target name="dex" depends="optimize">  
  276.         <echo>Converting compiled files and external libraries into ${out.absolute.dir}/${out.dex.file}    ...</echo>  
  277.         <apply executable="${tools.dx}" failonerror="true" parallel="true">  
  278.             <arg value="--dex" />  
  279.             <arg value="--output=${out.dex.absolute.file}" />  
  280.             <arg path="${out.classes.absolute.dir}" />  
  281.             <fileset dir="${in.external.libs.absolute.dir}" includes="*.jar"/>  
  282.         </apply>  
  283.         <delete dir="${out.classes.absolute.dir}"/>  
  284.     </target>  
  285.   
  286.     <!--  
  287.         第五步 打包资源文件(包括res、assets、androidmanifest.xml等):  
  288.         Eclipse中自动生成,ant和命令行使用Android SDK提供的aapt.exe生成资源包文件。   
  289.     -->  
  290.     <target name="package-resource">  
  291.         <echo>Packaging resources and assets ${out.resource.package.absolute.file}    ...</echo>  
  292.         <exec executable="${tools.aapt}" failonerror="true">  
  293.             <arg value="package" />  
  294.             <arg value="-f" />  
  295.             <arg value="-M" />  
  296.             <arg value="${in.manifest.file}" />  
  297.             <arg value="-S" />  
  298.             <arg value="${in.resource.absolute.dir}" />  
  299.             <arg value="-A" />  
  300.             <arg value="${in.asset.absolute.dir}" />  
  301.             <arg value="-I" />  
  302.             <arg value="${jar.android}" />  
  303.             <arg value="-F" />  
  304.             <arg value="${out.resource.package.absolute.file}" />  
  305.         </exec>  
  306.     </target>  
  307.   
  308.     <!--  
  309.         第六步 生成未签名的apk安装文件:  
  310.         Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用android SDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件。   
  311.     -->  
  312.     <!-- Package the application without signing it.  This allows for the application to be signed later with an official publishing key. -->  
  313.     <target name="package" depends="dex, package-resource">  
  314.         <echo>Packaging ${out.unsigned.package.absolute.file} for release...</echo>  
  315.         <exec executable="${tools.apkbuilder}" failonerror="true">  
  316.             <arg value="${out.unsigned.package.absolute.file}" />  
  317.             <arg value="-u" />  
  318.             <arg value="-z" />  
  319.             <arg value="${out.resource.package.absolute.file}" />  
  320.             <arg value="-f" />  
  321.             <arg value="${out.dex.absolute.file}" />  
  322.             <arg value="-rf" />  
  323.             <arg value="${in.source.absolute.dir}" />  
  324.             <arg value="-rj" />  
  325.             <arg value="${in.external.libs.absolute.dir}" />  
  326.         </exec>  
  327.         <echo>It will need to be signed with jarsigner before being published.</echo>  
  328.         <delete file="${out.resource.package.absolute.file}" />         
  329.         <delete file="${out.dex.absolute.file}" />          
  330.     </target>  
  331.   
  332.     <!-- 
  333.         第七步 对未签名的apk进行签名生成签名后的android文件: 
  334.     -->  
  335.     <!-- Package the application without signing it.  This allows for the application to be signed later with an official publishing key. -->  
  336.     <target name="jarsigner" depends="package">  
  337.         <echo>Packaging ${out.unsigned.package.absolute.file} for release...</echo>  
  338.         <exec executable="${tools.jarsigner}" failonerror="true">  
  339.             <arg value="-keystore" />  
  340.             <arg value="${keystore}" />  
  341.             <arg value="-storepass" />  
  342.             <arg value="${password}" />  
  343.             <arg value="-keypass" />  
  344.             <arg value="${password}" />  
  345.             <arg value="-signedjar" />  
  346.             <arg value="${out.signed.package.absolute.file}" />  
  347.             <arg value="${out.unsigned.package.absolute.file}" />  
  348.             <arg value="${keyalias}" />  
  349.         </exec>  
  350.         <delete file="${out.unsigned.package.absolute.file}" />  
  351.     </target>  
  352.   
  353.     <!-- 
  354.         第七步 签名的文件进行字节对齐; 
  355.     -->  
  356.     <target name="zipalign" depends="jarsigner">  
  357.         <echo>Zipalign ${out.aligned.package.absolute.file} for release...</echo>  
  358.         <exec executable="${tools.zipalign}">  
  359.             <arg value="-f" />  
  360.             <arg value="-v" />  
  361.             <arg value="4" />  
  362.             <arg value="${out.signed.package.absolute.file}" />  
  363.             <arg value="${out.aligned.package.absolute.file}" />  
  364.         </exec>  
  365.         <delete file="${out.signed.package.absolute.file}" />  
  366.     </target>  
  367.   
  368.     <!-- 
  369.         第八步 签名的文件进行字节对齐; 
  370.     -->  
  371.     <target name="release" depends="zipalign">  
  372.         <copy tofile="${release.package.absolute.file}">  
  373.             <fileset dir="${out.absolute.dir}" includes="${out.aligned.package.file}"/>  
  374.         </copy>  
  375.         <delete file="${out.aligned.package.absolute.file}" />  
  376.     </target>  
  377.   
  378.   
  379. </project>  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值