Changes between Initial Version and Version 1 of ant


Ignore:
Timestamp:
10/17/2014 02:49:07 PM (12 years ago)
Author:
liaojiaohe
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ant

    v1 v1  
     1要设置几个环境变量[[BR]] 
     2ANDROID_SDK_HOME  android sdk 目录[[BR]] 
     3JAVA_HOME  java 目录[[BR]] 
     4ANT_HOME ant目录 [[BR]] 
     5下载 ANT Contrib(多渠道循环时需要用到),把ant-contrib-1.0b3.jar  放到ant的lib目录下 [[BR]] 
     6http://nchc.dl.sourceforge.net/project/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3-bin.zip [[BR]] 
     7 
     8apkbuider 生成参考:http://blog.csdn.net/aiai373824745/article/details/38415621 [[BR]] 
     9脚本参考:http://blog.csdn.net/tenggangren/article/details/8051937 [[BR]] 
     10 
     11运行脚本:ant deploy [[BR]] 
     12 
     13{{{ 
     14<project name="TestTwo" default="release" >   
     15    <!-- ANT环境变量 -->   
     16    <property environment="env" />   
     17    <!-- 使用第三方的ant包,使ant支持for循环-->   
     18    <taskdef resource="net/sf/antcontrib/antcontrib.properties">   
     19        <classpath>   
     20            <pathelement location="${env.ANT_HOME}/lib/ant-contrib-1.0b3.jar" />   
     21        </classpath>   
     22    </taskdef>   
     23    <!-- 应用名称 -->   
     24    <property name="appName" value="${ant.project.name}" />   
     25    <!-- SDK目录(获取操作系统环境变量ANDROID_SDK_HOME的值) -->   
     26    <property name="sdk-folder" value="${env.ANDROID_SDK_HOME}" />   
     27    <!-- SDK指定平台目录 -->   
     28    <property name="sdk-platform-folder" value="${sdk-folder}/platforms/android-19" />   
     29    <!-- SDK中tools目录 -->   
     30    <property name="sdk-tools" value="${sdk-folder}/tools" />   
     31     <!-- SDK中build-tools目录 -->   
     32    <property name="build-tools" value="${sdk-folder}/build-tools/19.1.0" />   
     33    <!-- SDK指定平台中tools目录 -->   
     34    <property name="sdk-platform-tools" value="${sdk-folder}/platform-tools" />   
     35   
     36    <!-- 使用到的命令(根据系统替换成相对应的命令) -->   
     37    <property name="aapt" value="${build-tools}/aapt" />   
     38    <property name="aidl" value="${build-tools}/aidl" />   
     39    <property name="dx" value="${build-tools}/dx" />   
     40    <property name="apkbuilder" value="${sdk-tools}/apkbuilder" />   
     41    <property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner" />   
     42    <property name="zipalign" value="${build-tools}/zipalign" />   
     43   
     44    <!-- 编译需要的jar; 如果项目使用到地图服务则需要maps.jar -->   
     45    <property name="android-jar" value="${sdk-platform-folder}/android.jar" />   
     46    <property name="android-maps-jar" value="${sdk-folder}/add-ons/addon_google_apis_google_inc_8/libs/maps.jar" />   
     47   
     48 
     49 
     50       
     51    <!-- 编译aidl文件所需的预处理框架文件framework.aidl -->   
     52    <property name="framework-aidl" value="${sdk-platform-folder}/framework.aidl" />   
     53    <!-- 清单文件 -->   
     54    <property name="manifest-xml" value="AndroidManifest.xml" />   
     55    <!-- 源文件目录 -->   
     56    <property name="resource-dir" value="res" />   
     57    <property name="asset-dir" value="assets" />   
     58    <!-- java源文件目录 -->   
     59    <property name="srcdir" value="src" />   
     60    <property name="srcdir-ospath" value="${basedir}/${srcdir}" />   
     61    <!-- 外部类库所在目录 -->   
     62    <property name="external-lib" value="libs" />   
     63    <property name="external-lib-ospath" value="${basedir}/${external-lib}" />   
     64   
     65    <!-- 版本 -->   
     66    <property name="version" value="3.0" />   
     67       
     68        <property name="key" value="goapk,QQ" />   
     69    <property name="channelname" value="" />   
     70    <property name="channelkey" value="" />   
     71          
     72    <!--循环打包 -->   
     73        <target name="deploy">   
     74            <foreach target="modify_manifest" list="${key}" param="channelname" delimiter=",">   
     75            </foreach>   
     76        </target>   
     77        <target name="modify_manifest">   
     78            <!-- 正则匹配替换渠道号(这里pattern里的内容要与mainfest文件的内容一致,包括顺序,空格) -->   
     79            <replaceregexp flags="g" byline="false" encoding="UTF-8">   
     80                <regexp pattern='meta-data android:name="MOFANG_CHANNEL" android:value="(.*)"' />   
     81                <substitution expression='meta-data android:name="MOFANG_CHANNEL" android:value="${channelname}"' />   
     82                <fileset dir="" includes="AndroidManifest.xml" />   
     83            </replaceregexp>   
     84            <antcall target="zipalign" />   
     85        </target>   
     86       
     87    <!-- 初始化工作 -->   
     88    <target name="init">   
     89        <echo>目录初始化....</echo>   
     90        <!-- 生成R文件的相对目录 -->   
     91        <var name="outdir-gen" value="gen" />   
     92        <!-- 编译后的文件放置目录 -->   
     93        <var name="outdir-bin" value="bin-${channelname}" />   
     94        <!-- 生成class目录 -->   
     95        <var name="outdir-classes" value="${outdir-bin}" />   
     96        <var name="outdir-classes-ospath" value="${basedir}/${outdir-classes}" />   
     97   
     98        <!-- classes.dex相关变量 -->   
     99        <var name="dex-file" value="classes.dex" />   
     100        <var name="dex-path" value="${outdir-bin}/${dex-file}" />   
     101        <var name="dex-ospath" value="${basedir}/${dex-path}" />   
     102   
     103        <!-- 经过aapt生成的资源包文件 -->   
     104        <var name="resources-package" value="${outdir-bin}/resources.ap_" />   
     105        <var name="resources-package-ospath" value="${basedir}/${resources-package}" />   
     106   
     107        <!-- 未认证apk包 -->   
     108        <var name="out-unsigned-package" value="${outdir-bin}/${appName}-unsigned.apk" />   
     109        <var name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" />   
     110   
     111        <!-- 证书文件 -->   
     112        <var name="keystore-file" value="${basedir}/test.keystore" />   
     113   
     114        <!-- 已认证apk包 -->   
     115        <var name="out-signed-package" value="${outdir-bin}/${appName}-${channelname}-${version}.apk" />   
     116        <var name="out-signed-package-ospath" value="${basedir}/${out-signed-package}" />   
     117        <delete dir="${outdir-bin}" />   
     118        <mkdir dir="${outdir-bin}" />   
     119        <mkdir dir="${outdir-classes}" />   
     120    </target>   
     121   
     122    <!-- 根据工程中的资源文件生成R.java文件  -->   
     123    <target name="gen-R" depends="init">   
     124        <echo>生成R.java文件....</echo>   
     125        <exec executable="${aapt}" failonerror="ture">   
     126            <arg value="package" />   
     127            <arg value="-f" />   
     128            <arg value="-m" />   
     129            <arg value="-J" />   
     130            <arg value="${outdir-gen}" />   
     131            <arg value="-S" />   
     132            <arg value="${resource-dir}" />   
     133            <arg value="-M" />   
     134            <arg value="${manifest-xml}" />   
     135            <arg value="-I" />   
     136            <arg value="${android-jar}" />   
     137        </exec>   
     138    </target>   
     139   
     140    <!-- 编译aidl文件 -->   
     141    <target name="aidl" depends="gen-R">   
     142        <echo>编译aidl文件....</echo>   
     143        <apply executable="${aidl}" failonerror="true">   
     144            <!-- 指定预处理文件 -->   
     145            <arg value="-p${framework-aidl}" />   
     146            <!-- aidl声明的目录 -->   
     147            <arg value="-I${srcdir}" />   
     148            <!-- 目标文件目录 -->   
     149            <arg value="-o${outdir-gen}" />   
     150            <!-- 指定哪些文件需要编译 -->   
     151            <fileset dir="${srcdir}">   
     152                <include name="**/*.aidl" />   
     153            </fileset>   
     154        </apply>   
     155    </target>   
     156   
     157    <!-- 将工程中的java源文件编译成class文件 -->   
     158    <target name="compile" depends="aidl">   
     159        <echo>java源文件编译成class文件....</echo>   
     160        <javac encoding="utf-8" target="1.5" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}" verbose="false">   
     161            <compilerarg line="-encoding GBK " />   
     162            <classpath>   
     163                <fileset dir="${external-lib}" includes="*.jar" />   
     164            </classpath>   
     165        </javac>   
     166    </target>   
     167   
     168   
     169    <!-- 将.class文件转化成.dex文件 -->   
     170    <target name="dex" depends="compile">   
     171        <echo>将.class文件转化成.dex文件....</echo>   
     172        <exec executable="${dx}" failonerror="true">   
     173            <arg value="--dex" />   
     174            <!-- 输出文件 -->   
     175            <arg value="--output=${dex-ospath}" />   
     176            <!-- 要生成.dex文件的源classes和libraries -->   
     177            <arg value="${outdir-classes-ospath}" />   
     178            <arg value="${external-lib-ospath}" />   
     179        </exec>   
     180    </target>   
     181   
     182    <!-- 将资源文件放进输出目录 -->   
     183    <target name="package-res-and-assets">   
     184        <echo>将资源文件放进输出目录....</echo>   
     185        <exec executable="${aapt}" failonerror="true">   
     186            <arg value="package" />   
     187            <arg value="-f" />   
     188            <arg value="-M" />   
     189            <arg value="${manifest-xml}" />   
     190            <arg value="-S" />   
     191            <arg value="${resource-dir}" />   
     192            <arg value="-A" />   
     193            <arg value="${asset-dir}" />   
     194            <arg value="-I" />   
     195            <arg value="${android-jar}" />   
     196            <arg value="-F" />   
     197            <arg value="${resources-package}" />   
     198        </exec>   
     199    </target>   
     200   
     201    <!-- 打包成未签证的apk -->   
     202    <target name="package" depends="dex, package-res-and-assets">   
     203        <echo>打包成未签证的apk....</echo>   
     204        <exec executable="${apkbuilder}" failonerror="true">   
     205            <arg value="${out-unsigned-package-ospath}" />   
     206            <arg value="-u" />   
     207            <arg value="-z" />   
     208            <arg value="${resources-package-ospath}" />   
     209            <arg value="-f" />   
     210            <arg value="${dex-ospath}" />   
     211            <arg value="-rf" />   
     212            <arg value="${srcdir-ospath}" />   
     213        </exec>   
     214    </target>   
     215   
     216    <!-- 对apk进行签证 -->   
     217    <target name="jarsigner" depends="package">   
     218        <echo>Packaging signed apk for release...</echo>   
     219        <exec executable="${jarsigner}" failonerror="true">   
     220            <arg value="-keystore" />   
     221            <arg value="${keystore-file}" />   
     222            <arg value="-storepass" />   
     223            <arg value="123456" />   
     224            <arg value="-keypass" />   
     225            <arg value="123456" />   
     226            <arg value="-signedjar" />   
     227            <arg value="${out-signed-package-ospath}" />   
     228            <arg value="${out-unsigned-package-ospath}" />   
     229            <!-- 不要忘了证书的别名 -->   
     230            <arg value="kingson1.keystore" />   
     231        </exec>   
     232    </target>   
     233   
     234    <!-- 发布 -->   
     235    <target name="release" depends="jarsigner">   
     236        <!-- 删除未签证apk -->   
     237        <delete file="${out-unsigned-package-ospath}" />   
     238        <echo>APK is released. path:${out-signed-package-ospath}</echo>   
     239    </target>   
     240    <!-- 打包的应用程序进行优化 -->   
     241       
     242    <target name="zipalign" depends="release">   
     243        <exec executable="${zipalign}" failonerror="true">   
     244            <arg value="-v" />   
     245            <arg value="4" />   
     246            <arg value="${out-signed-package-ospath}" />   
     247            <arg value="${out-signed-package-ospath}-zipaligned.apk" />   
     248        </exec>   
     249    </target>   
     250</project> 
     251}}}