Ant打包學習(沒有繼承sdk的build.xml並且不適用於引用了libraryproject的project)

打包方式有三種:
1、eclipse
2、ant
3、編寫批處理主動調用adt工具打包
========================================================================

1、進入命令行模式,並切換到項目目錄,執行如下命令爲ADT創建的項目添加ant build支持:

android update project -p . -t 17

2、build腳本默認target是help,所以會顯示如上信息,修改target爲debug或release就可以像無ant時一樣編譯、生成以及調試了。

3、使用release時  在local.properties添加簽名信息

#keystore

key.store=hujiang.p12

key.alias=xxx

key.store.password=xxx

key.alias.password=xxx

======完整如下(沒有繼承sdk的build.xml並且不適用於引用了libraryproject的project)========================================

<?xml version="1.0" encoding="utf-8"?>

<!-- 步驟 


1.用aapt生成R.java


2.JAVAC編譯JAVA文件


3.批處理生成classes.dex


4.aapt打包資源 


5.apkbuilder包資源和類文件爲APK文件


6.jarsinger 對APK進行簽名-->


<project name="Project" default="zipalign" basedir=".">

<!-- 

<property file="local.properties" /> -->


<property name="libs-dir" value="${basedir}/libs" />


<!-- 定義自己的輸出目錄 -->

<property name="sdk-platform-tools" value="D:/adt-bundle-windows-x86-20130219/adt-bundle-windows-x86-20130219/sdk/platform-tools" />

<property name="sdk-tools" value="D:/adt-bundle-windows-x86-20130219/adt-bundle-windows-x86-20130219/sdk/tools" />

<property name="sdk-platform" value="D:/adt-bundle-windows-x86-20130219/adt-bundle-windows-x86-20130219/sdk/platforms/android-17" />

<property name="proguard-home" value="D:/adt-bundle-windows-x86-20130219/adt-bundle-windows-x86-20130219/sdk/tools/proguard/lib" />

<property name="jdk-home" value="D:/Java/jdk1.6.0_26" />

<property name="jdk-ver" value="1.6" />

<property name="jdk-compile-encode" value="UTF-8" />

<property name="keystore" value="F:/ss.p12" />

<property name="key" value="xx" />

<property name="keypass" value="xx" />

<property name="bin-dir" value="bin" />



<!-- 定義 R.java 所有目錄    <property name="out.absolute.dir" location="${bin-dir}" />-->


<property name="gen-dir" value="gen" />


<!-- 讀取目錄 -->


<property name="res-dir" value="res" />


<property name="assets-dir" value="assets" />


<property name="src-dir" value="src" />


<property name="src-dir-absolute" value="${basedir}/${src-dir}" />



<!-- 輸出目錄 -->


<property name="bin-dir-classes" value="${bin-dir}/classes" />


<property name="bin-dir-classes-absolute" value="${basedir}/${bin-dir-classes}" />


<!-- 臨時類資源文件  <property name="out.classes.absolute.dir" location="${bin-dir-classes}" /> -->


<property name="dex-path-absolute" value="${basedir}/${bin-dir}/classes.dex" />


<!-- 最終生成文件 -->


<property name="out-package" value="${bin-dir}/${ant.project.name}.apk" />


<!-- 要使用的工具 -->


<property name="aapt" value="${sdk-platform-tools}/aapt.exe" />


<property name="aidl" value="${sdk-platform-tools}/aidl.exe" />


<property name="dx" value="${sdk-platform-tools}/dx.bat" />


<property name="adb" value="${sdk-platform-tools}/adb.exe" />


<property name="apk-builder" value="${sdk-tools}/apkbuilder.bat" />


<property name="android-jar" value="${sdk-platform}/android.jar" />


<!-- 最終生成各種包文件 -->


<property name="resources-package" value="${bin-dir}/${ant.project.name}" />


<property name="resources-package-ospath" value="${basedir}/${resources-package}" />


<property name="out-unsigned-package" value="${bin-dir}/${ant.project.name}-unsigned.apk" />


<property name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" />


<property name="out-signed-package" value="${bin-dir}/${ant.project.name}-signed.apk" />


<property name="out-signed-package-ospath" value="${basedir}/${out-signed-package}" />


<property name="zipalign-package-ospath" value="${basedir}/${bin-dir}/${ant.project.name}_release.apk" />



<!--簽名工具-->


<property name="jarsigner" value="${jdk-home}/bin/jarsigner.exe" />


<!--優化APK工具-->


<property name="zipalign" value="${sdk-tools}/zipalign.exe" />


<!-- 初始化 -->


<target name="init">


<echo>Creating all output directories </echo>


<delete dir="${bin-dir}" />


<delete dir="${bin-dir-classes}" />


<delete dir="${gen-dir}" />


<mkdir dir="${bin-dir}" />


<mkdir dir="${bin-dir-classes}" />


<mkdir dir="${gen-dir}" />

</target>

<!--步驟 1: aapt生成R.java depends="init"-->


<target name="generateR" >


<echo>Generating R.java...</echo>

<exec executable="${aapt}" failonerror="true">


<arg value="package" />


<arg value="-m" />


<arg value="-J" />


<arg value="${gen-dir}" />


<arg value="-M" />


<arg value="AndroidManifest.xml" />


<arg value="-S" />

<arg value="${res-dir}" />


<arg value="-I" />


<arg value="${android-jar}" />


</exec>

</target>

<!-- Generate java classes from .aidl files. 暫時沒有用到-->


<target name="aidl" depends="init">


<echo>Compiling aidl files into Java classes...</echo>


<apply executable="${aidl}" failonerror="true">


<arg value="-p${android-framework}" />


<arg value="-I${src-dir}" />


<fileset dir="${src-dir}">


<include name="**/*.aidl" />


</fileset>


</apply>


</target>


<!-- 步驟 2. 編譯所有class文件. depends="init, generateR, aidl-->


<target name="compile" depends="init, generateR, aidl" >

    <!-- 第三方包 -->

<unjar src="${libs-dir}/android-support-v4.jar"  dest="${bin-dir-classes}" />


<!-- java的版本號 -->

<javac encoding="${jdk-compile-encode}" target="${jdk-ver}" debug="true" extdirs="" srcdir="." destdir="${bin-dir-classes}" bootclasspath="${android-jar}" />


</target>


<!-- 混淆代碼-->


<target name="proguard" depends="compile">


<jar basedir="${bin-dir-classes}" destfile="temp.jar" />


<java jar="${proguard-home}/proguard.jar" fork="true" failonerror="true">


<jvmarg value="-Dmaximum.inlined.code.length=32" />


<arg value="-injars temp.jar" />


<arg value="-outjars optimized.jar" />


<arg value="-libraryjars ${android-jar}" />


<arg value="-dontpreverify" />


<arg value="-dontoptimize" />


<arg value="-dontusemixedcaseclassnames" />


<arg value="-repackageclasses ''" />


<arg value="-allowaccessmodification" />


<!-- 要保留自己的主ACTIVITY類 -->

<arg value="-keep public class * extends android.app.Activity" />  

            <arg value="-keep public class * extends android.app.Service" />  

            <arg value="-keep public class * extends android.content.BroadcastReceiver" />  

            <arg value="-keep public class * extends android.content.ContentProvider" />  

            <arg value="-keep public class * extends android.view.View" /> 


<arg value="-optimizationpasses 7" />


<arg value="-verbose" />


<arg value="-dontskipnonpubliclibraryclasses" />


<arg value="-dontskipnonpubliclibraryclassmembers" />


</java>


<delete file="temp.jar" />


<delete dir="${bin-dir-classes}" />


<mkdir dir="${bin-dir-classes}" />


<unzip src="optimized.jar"  dest="${bin-dir-classes}" />


<delete file="optimized.jar" /> 


</target>


<!-- 步驟 3. 轉換class文件爲dex文件. -->


<target name="dex" depends="proguard">


<echo>Converting compiled files into ${dex-path-absolute}... </echo>


<exec executable="${dx}" failonerror="true">


<arg value="--dex" />


<arg value="--output=${dex-path-absolute}" />


<arg path="${bin-dir-classes-absolute}" />


</exec>


</target>


<!-- 步驟 4. 將資源和清單打包. -->


<target name="package-res-and-assets">


<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="${res-dir}" />


<arg value="-A" />


<arg value="${assets-dir}" />


<arg value="-I" />


<arg value="${android-jar}" />


<arg value="-F" />


<arg value="${resources-package}" />


</exec>


</target>


<!-- 步驟 5. 將打好的包編譯爲APK文件. -->


<target name="debug" depends="dex, package-res-and-assets">


<echo>release:Packaging ${out-debug-package-ospath}, and signing it with a debug key...</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="${dex-path-absolute}" />


<arg value="-rf" />


<arg value="${src-dir-absolute}" />


</exec>


</target>


<!--步驟 6. 簽名APK文件 -->


<target name="jarsigner" depends="debug">


<echo> jarsigner ${out-signed-package-ospath}</echo>


<exec executable="${jarsigner}" failonerror="true">


<arg value="-verbose" />


<arg value="-storepass" />


<arg value="${keypass}" />


<arg value="-keystore" />


<arg value="${keystore}" />


<arg value="-signedjar" />


<arg value="${out-signed-package-ospath}" />


<arg value="${out-unsigned-package-ospath}" />


<arg value="${key}" />


</exec>


</target>


<!--zipalign優化android程序-->


<target name="zipalign" depends="jarsigner">


<echo> zipalign ${zipalign-package-ospath}</echo>


<exec executable="${zipalign}" failonerror="true">


<arg value="-v" />


<arg value="-f" />


<arg value="4" />


<arg value="${out-signed-package-ospath}" />


<arg value="${zipalign-package-ospath}" />


</exec>


</target>


<!-- 安裝到默認的手機或模擬器-->


<target name="install" depends="zipalign">


<echo>Installing ${out-debug-package} onto default emulator...</echo>


<exec executable="${adb}" failonerror="true">


<arg value="install" />


<arg value="${out-signed-package}" />


</exec>


</target>


</project>

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