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