利用ant自動打包生成apk文件

ant源碼

<?xml version="1.0" encoding="UTF-8"?>
<project name="identity" default="package-delete" basedir=".">
  <!--應用標識:格式爲域名去掉點"一-->
  <property name="app_id" value="" />
  <!--應用名稱-->
  <property name="app_name" value="" />
  <!--版本號-->
  <property name="version" value="" />
  <!-- 主機地址 -->
  <property name="host_address" value="" />
  <!--需要手動配置,擁有自定義視圖的佈局文件-->
  <property name="assist-sign" value="." />
  <!--jdk、sdk環境配置-->
  <property name="jdk.folder" value="C:\Program Files\Java\jdk1.6.0_24" />
  <property name="sdk.folder" value="D:\wwwroot\basf\jdk\android-sdk-windows" />
  <property name="platform.tools" value="${sdk.folder}\platform-tools" />
  <property name="platform" value="${sdk.folder}\platforms\android-17" />
  <property name="build.tools" value="${sdk.folder}\build-tools\17.0.0" />
  <!--下方的代碼爲只讀,不能被修改-->
  <property name="keystore" value="${basedir}\enterpriseclient.keystore" />
  <property name="out-dir-package" value="bin/${ant.project.name}.apk" />
  <property name="aapt" value="${build.tools}\aapt.exe" />
  <property name="android-jar" value="${platform}\android.jar" />
  <property name="aidl" value="${build.tools}\aidl.exe" />
  <property name="dx" value="${build.tools}\dx.bat" />
  <property name="apk-builder" value="${sdk.folder}\tools\apkbuilder.bat" />
  <property name="jarsigner" value="${jdk.folder}\bin\jarsigner.exe" />
  <property name="zipalign" value="${sdk.folder}\tools\zipalign.exe" />
  <property name="android-framework" value="${platform}\framework.aidl" />
  <property name="manifest" value="AndroidManifest.xml" />
  <property name="strings" value="res/values/strings.xml" />
  <property name="outdir-gen" value="gen" />
  <property name="resource-dir" value="res" />
  <property name="asset-dir" value="assets" />
  <property name="password" value="enterpriseclient" />
  <property name="srcdir" value="src" />
  <property name="srcdir-ospath" value="${basedir}\${srcdir}" />
  <property name="outdir-bin" value="bin" />
  <property name="outdir-classes" value="${outdir-bin}\classes" />
  <property name="outdir-obfuscate-classes-ospath" value="${basedir}\${outdir-classes}" />
  <property name="dex-file" value="classes.dex" />
  <property name="intermediate-dex" value="${outdir-bin}\${dex-file}" />
  <property name="intermediate-dex-ospath" value="${basedir}\${intermediate-dex}" />
  <property name="resources-package" value="${outdir-bin}/${ant.project.name}.ap_" />
  <property name="out-unsigned-package" value="${outdir-bin}/${ant.project.name}-unsigned.apk" />
  <property name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" />
  <property name="out-signed-package" value="${outdir-bin}/${ant.project.name}-signed.apk" />
  <property name="out-signed-package-ospath" value="${basedir}/${out-signed-package}" />
  <property name="resources-package" value="${outdir-bin}/${ant.project.name}.ap_" />
  <property name="resources-package-ospath" value="${basedir}/${resources-package}" />
  <property name="external-libs" value="libs" />
  <property name="android-libs" value="${basedir}\libs" />
  <property name="outdir-libs" value="${outdir-bin}\${external-libs}" />
  <!-- 自定義視圖 -->
  <property name="banner_imageview_detail"  value="res/layout/banner_imageview_detail.xml"/>
  <property name="good_detail_activity"  value="res/layout/good_detail_activity.xml"/>
  <property name="good_detail_list"  value="res/layout/good_detail_list.xml"/>
  <property name="gooditemlarge"  value="res/layout/gooditemlarge.xml"/>
  <property name="hotselling_cell"  value="res/layout/hotselling_cell.xml"/>
  <property name="logistic_list"  value="res/layout/logistic_list.xml"/>
  <property name="pager_imageview"  value="res/layout/pager_imageview.xml"/>
  <property name="profile"  value="res/layout/profile.xml"/>
  <property name="search"  value="res/layout/search.xml"/>
  <property name="shop_car"  value="res/layout/shop_car.xml"/>
  
  <property name="shop_notify"  value="res/layout/shop_notify.xml"/>
  <property name="shophelp_cell"  value="res/layout/shophelp_cell.xml"/>
  <property name="specification_cell"  value="res/layout/specification_cell.xml"/>
  <property name="specification_value_cell"  value="res/layout/specification_value_cell.xml"/>
  <property name="trade_list"  value="res/layout/trade_list.xml"/>
  <property name="two_good_item"  value="res/layout/two_good_item.xml"/>
  
  <!--開始打包-->
  <target name="init">
    <echo message="5" />
    <echo message="create new package..." />
    <mkdir dir="src/com/kplusshop/${app_id}" />
  </target>
  <target name="move" depends="init">
    <echo message="10" />
    <echo message="move all the java files to new package" />
    <move todir="src/com/kplusshop/${app_id}" failonerror="true">
      <fileset dir="src/com/kplusshop/identity">
        <include name="**/*.java" />
      </fileset>
    </move>
  </target>
  <target name="delete" depends="move">
    <echo message="15" />
    <echo message="delete old package" />
    <delete dir="src/com/kplusshop/identity" includeemptydirs="true" failonerror="true">
    </delete>
  </target>
  <target name="modifypackage" depends="delete">
    <echo message="20" />
    <echo message="modify the packagename of all the files" />
    <!--修改所有.java文件的包名-->
    <replace dir="src/com/kplusshop/${app_id}" token="${assist-sign}ecmobile" value="${assist-sign}${app_id}">
    </replace>
    <!--修改XMPPUtility.java中的域名前綴-->
    <replaceregexp file="src/com/kplusshop/${app_id}/ConstantToHelper.java" match="HOST_ADDRESS = "(.*)"" replace="BASE_URL = "${host_address}"" encoding="utf-8" byline="true">
    </replaceregexp>
    <!--修改所有strings.xml相關數據-->
    <replaceregexp file="${strings}" match="<string name="app_name">(.*)</string>" replace="<string name="app_name">${app_name}</string>" encoding="utf-8" byline="true">
    </replaceregexp>
    <replaceregexp file="${strings}" match="<string name="app_id">(.*)</string>" replace="<string name="app_id">${app_id}</string>" encoding="utf-8" byline="true">
    </replaceregexp>
    <!--修改所有AndroidManifest.xml文件的包名-->
    <replaceregexp file="${manifest}" match="package="com.kplusshop.identity.(.*)"" replace="package="com.kplusshop.identity.${app_id}"" byline="true">
    </replaceregexp>
    <replaceregexp file="${manifest}" match="android:versionName="(.*)"" replace="android:versionName="${version}"" byline="true">
    </replaceregexp>
    <!-- 修改自定義視圖 -->  
   <replace file="${banner_imageview_detail}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${good_detail_activity}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${good_detail_list}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${gooditemlarge}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${hotselling_cell}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${logistic_list}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${pager_imageview}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${profile}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${search}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${shop_car}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${shop_notify}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${shophelp_cell}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${specification_cell}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${specification_value_cell}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${trade_list}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
   <replace file="${two_good_item}" token="${assist-sign}identity" value="${assist-sign}${app_id}">
   </replace>
        
  </target>
  <target name="delete-r-file" depends="modifypackage">
    <echo message="25" />
    <echo message="Deleting the old R.java..." />
    <delete dir="${outdir-gen}/mobi/toms/trade/identity" includeemptydirs="true" failonerror="true">
    </delete>
  </target>
  <target name="generate-r-file" depends="delete-r-file">
    <echo message="30" />
    <echo message="Generating R.java from the resources..." />
    <exec executable="${aapt}" failonerror="true">
      <arg value="package" />
      <arg value="-m" />
      <arg value="-J" />
      <arg value="${outdir-gen}" />
      <arg value="-M" />
      <arg value="AndroidManifest.xml" />
      <arg value="-S" />
      <arg value="${resource-dir}" />
      <arg value="-I" />
      <arg value="${android-jar}" />
    </exec>
  </target>
  <!--修改包名結束-->
  <!--Readonly Operate:Start Packaged-->
  <target name="package-init" depends="generate-r-file">
    <echo message="35" />
    <echo message="Creating all output directories..." />
    <delete dir="${outdir-bin}" />
    <mkdir dir="${outdir-bin}" />
    <mkdir dir="${outdir-classes}" />
    <mkdir dir="${outdir-libs}" />
    <mkdir dir="${outdir-libs}\${asset-dir}" />
  </target>
  <target name="package-aidl" depends="package-init">
    <echo message="40" />
    <echo message="Compiling aidl files into Java classes..." />
    <apply executable="${aidl}" failonerror="true">
      <arg value="-p${android-framework}" />
      <arg value="-I${srcdir}" />
      <fileset dir="${srcdir}">
        <include name="**/*.aidl" />
      </fileset>
    </apply>
  </target>
  <target name="package-compile" depends="package-init,package-aidl">
    <echo message="45" />
    <echo message="Compile the project's .java files into .class files." />
    <javac encoding="UTF-8" target="1.5" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}" verbose="false" classpath="${basedir}\${outdir-classes}" includeantruntime="on">
      <classpath>
        <fileset dir="${external-libs}" includes="*.jar" />
      </classpath>
    </javac>
  </target>
  <!---
  <target name="package-unjar" depends="package-compile">
    <echo message="50" />
    <echo message="unjar baidumapapi_v2_0_0.jar file" />
    <unjar src="${external-libs}\baidumapapi_v2_1_2.jar" dest="${outdir-libs}">
    </unjar>
    <copy todir="${asset-dir}" failonerror="true">
      <fileset dir="${outdir-libs}\${asset-dir}">
        <include name="**" />
      </fileset>
    </copy>
    <delete dir="${outdir-libs}" failonerror="true">
    </delete>
  </target>
	-->
  <target name="package-dex" depends="package-compile">
    <echo message="57" />
    <echo>Converting compiled files and external libraries into the classes.dex file...</echo>
    <apply executable="${dx}" failonerror="true" parallel="true">
      <arg value="--dex" />
      <arg value="--output=${intermediate-dex-ospath}" />
      <arg path="${outdir-obfuscate-classes-ospath}" />
      <fileset dir="${external-libs}" includes="*.jar" />
    </apply>
  </target>
  <!--package res and assets folder-->
  <target name="package-res-and-assets">
    <echo message="71" />
    <echo>Packaging resources and assets...</echo>
    <exec executable="${aapt}" failonerror="true">
      <arg value="package" />
      <arg value="-f" />
      <arg value="-M" />
      <arg value="AndroidManifest.xml" />
      <arg value="-S" />
      <arg value="${resource-dir}" />
      <arg value="-A" />
      <arg value="${asset-dir}" />
      <arg value="-I" />
      <arg value="${android-jar}" />
      <arg value="-F" />
      <arg value="${resources-package}" />
    </exec>
  </target>
  <!--package res and no assets folder-->
  <target name="package-res-no-assets">
    <echo message="71" />
    <echo>Packaging resources...</echo>
    <exec executable="${aapt}" failonerror="true">
      <arg value="package" />
      <arg value="-f" />
      <arg value="-M" />
      <arg value="AndroidManifest.xml" />
      <arg value="-S" />
      <arg value="${resource-dir}" />
      <arg value="-I" />
      <arg value="${android-jar}" />
      <arg value="-F" />
      <arg value="${resources-package}" />
    </exec>
  </target>
  <target name="package-res">
    <echo message="64" />
    <echo message="handle resources packaging..." />
    <property name="res-target" value="no-assets" />
    <available file="${asset-dir}" type="dir" property="res-target" value="and-assets" />
    <antcall target="package-res-${res-target}" />
  </target>
  <target name="package-release" depends="package-dex, package-res">
    <echo message="78" />
    <echo>Packaging ${out-unsigned-package} for release...</echo>
    <exec executable="${apk-builder}" failonerror="true">
      <arg value="${out-unsigned-package-ospath}" />
      <arg value="-u" />
      <arg value="-z" />
      <arg value="${resources-package-ospath}" />
      <arg value="-f" />
      <arg value="${intermediate-dex-ospath}" />
      <arg value="-rf" />
      <arg value="${srcdir-ospath}" />
      <arg value="-rj" />
      <arg value="." />
      <arg value="-nf" />
      <arg value="${android-libs}" />
    </exec>
  </target>
  <target name="jarsigner" depends="package-release">
    <echo message="85" />
    <echo message="Signing apk file..." />
    <exec executable="${jarsigner}" failonerror="true">
      <arg value="-verbose" />
      <arg value="-storepass" />
      <arg value="${password}" />
      <arg value="-keystore" />
      <arg value="${keystore}" />
      <arg value="-signedjar" />
      <arg value="${out-signed-package-ospath}" />
      <arg value="${out-unsigned-package-ospath}" />
      <arg value="${password}" />
    </exec>
  </target>
  <target name="zipalign" depends="jarsigner">
    <echo message="92" />
    <echo message="zipalign apk file..." />
    <exec executable="${zipalign}" failonerror="true">
      <arg value="-v" />
      <arg value="-f" />
      <arg value="4" />
      <arg value="${out-signed-package-ospath}" />
      <arg value="${out-dir-package}" />
    </exec>
  </target>
  <target name="package-delete" depends="zipalign">
    <echo message="100" />
    <echo message="Deleting garbage file..." />
    <delete file="${out-signed-package-ospath}" failonerror="true" />
    <delete file="${out-unsigned-package-ospath}" failonerror="true" />
  </target>
  <!--Readonly Operate:End Packaged-->
</project>


溫馨提示:注意源碼和build編碼問題


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章