Ant用於Android項目的打包整理


       Ant是java項目主要的打包工具,而在Android項目中也同樣發揮重要作用.現在整理用到的一些基本用法.更詳細的可以參考官方幫助文檔(http://ant.apache.org/manual/index.html).

(1)基本標簽

包括project,task和property(loadproperties),path等.這些是構成ant腳本的基本標簽,其中

project為必須帶有的標簽,且只能有一個.

task是表示每個任務的標簽,至少有一個.

property為定義變量使用,一般用於文件路徑等地方.而loadproperties則是加載保存在文件中的變量(用=號分隔).

path是指明目錄路徑,作為其他命令的目錄參數使用.

(2)基本文件操作標簽

包括 copy,delete,mkdir等,具體的用法可以查看ant官方文檔.

(3)java編譯打包相關

這里主要用到的是javac 和 jar 這兩個標簽.其實ant中只是將我們之前需要通過命令行執行的改為通過xml標簽形式,使用的方式與通過命令行敲命令一致.

具體參考幫助文檔例子.

(4)class文件的混淆

<target name="proguard" description="進行proguard混淆" depends="compilejar">

        <java jar="${proguard.dir}/proguard.jar" fork="true" failonerror="true">
            <jvmarg value="-Dmaximum.inlined.code.length=16" />

            <arg value="@${ant.proguard.cfg}" />
        </java>

    </target>

對於一些對外發布的jar包庫,會需要進行混淆后發布,以上為執行混淆的ant腳本,核心是通過java命令執行proguard.jar,對使用的的jar包按照配置文件進行混淆操作.

(5)android打包步驟

這些步驟主要都是通過exec標簽,執行andorid sdk提供的打包工具命令.

a)根據資源目錄和manifest文件生成R.java,用於資源id綁定.

    <target name="resource-src" depends="copy">
        <echo>生成 R.java / Manifest.java</echo>
        <exec executable="${aapt}" failonerror="true">
            <arg value="package" />
            <arg value="-m" />
            <arg value="-J" />
            <arg value="${outdir-gen}" />
            <arg value="-M" />
            <arg value="${destdir}\AndroidManifest.xml" />
            <arg value="-S" />
            <arg value="${resource-dir}" />
            <arg value="-I" />
            <arg value="${android-jar}" />
        </exec>
    </target>

這一步會有可能需要用到library project的R.java的,具體可以參考之前的一篇文章.

b)編譯aidl

    <!-- Generate java classes from .aidl files. -->
    <target name="aidl" depends="copy">
        <echo>編譯 aidl</echo>
        <apply executable="${aidl}" failonerror="true">
            <arg value="-p${android-framework}" />
            <arg value="-I${srcdir}" />
            <fileset dir="${srcdir}">
                <include name="**/*.aidl" />
            </fileset>
        </apply>
    </target>

c)編譯java源文件,參考上面javac命令使用.如果需要混淆的,也在這步進行,具體可以參考上面步驟.

d)轉換為dex文件

主要將步驟c生成的class文件轉為dex文件.

    <target name="dex" depends="compile">
        <echo>轉化文件為dex文件</echo>
        <apply executable="${dx}" failonerror="true" parallel="true">
            <arg value="--dex" />
            <arg value="--output=${intermediate-dex}" />
            <arg path="${outdir-obfuscate-classes}" />
            <fileset dir="${external-libs}" includes="*.jar" />
        </apply>
    </target>

e)資源打包

將具體的資源(包括res和assets)進行打包.

<target name="package-res-no-assets">
        <echo>資源打包</echo>
        <exec executable="${aapt}" failonerror="true">
            <arg value="package" />
            <arg value="-f" />
            <arg value="-M" />
            <arg value="${destdir}\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>

    <target name="package-res">
        <available file="${asset-dir}" type="dir" property="res-target" value="and-assets" />
        <property name="res-target" value="no-assets" />
        <antcall target="package-res-${res-target}" />
    </target>

f)生成未簽名的apk

    <target name="package" depends="dex, package-res-no-assets">
        <echo>Packaging ${out-unsigned-package} for release...</echo>
        <exec executable="${apk-builder}" failonerror="true">
            <arg value="${out-unsigned-package}" />
            <arg value="-u" />
            <arg value="-z" />
            <arg value="${resources-package}" />
            <arg value="-f" />
            <arg value="${intermediate-dex}" />
            <arg value="-rf" />
            <arg value="${srcdir}" />
            <arg value="-nf" />
            <arg value="${external-libs}" />
            <arg value="-rj" />
            <arg value="${external-libs}" />
        </exec>
        <echo>It will need to be signed with jarsigner before being published.</echo>
    </target>

g)打入簽名

    <target name="debug" depends="package">
        <echo>Packaging ${out-signed-package}, and signing it with a debug key...</echo>
        <exec executable="${apk-builder}" failonerror="true">
            <arg value="${out-signed-package}" />
            <arg value="-z" />
            <arg value="${resources-package}" />
            <arg value="-f" />
            <arg value="${intermediate-dex}" />
            <arg value="-rf" />
            <arg value="${srcdir}" />
            <arg value="-nf" />
            <arg value="${external-libs}" />
            <arg value="-rj" />
            <arg value="${external-libs}" />
        </exec>

    </target>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM