您的位置:首页 > 移动开发 > Android开发

使用ant编译Android工程(二)

2015-01-30 17:10 405 查看
继上一篇使用ant编译Android工程(一),本次主要说明Android工程引用第三方lib工程时该如何编译。

android工程引用第三方lib工程使用ant编译步骤与普通工程相同,只有生成R文件、编译java类、混淆class文件、生成dex文件、打包资源等步骤不同。

1、生成R文件,应用第三方lib工程的android工程,在gen目录下为有其引用的lib工程生成的R文件,因此,在ant编译过程中我们也需要生成。

<!-- 根据工程中的资源文件生成R.java文件  -->
<target name="gen-R" depends="init">
<echo>生成R.java文件....</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-m" />
<arg value="-J" />
<arg value="${outdir-gen}" />
<arg value="-S" />
<arg value="${resource-dir}" />
<!-- 第三方lib 库开始 -->
<arg value="-S"/>
<arg value="../appcompat_v7/res"/>
<!-- 第三方lib 库结束 -->
<arg value="-M" />
<arg value="${manifest-xml}" />
<arg value="-I" />
<arg value="${android-jar}" />
<!-- 第三方lib 库开始 -->
<arg value="--auto-add-overlay" />
<!-- 第三方lib 库结束 -->
</exec>
</target>

<!-- 第三方lib 库开始 -->
<target name="gen-R1" depends="init">
<echo>生成R.java文件....</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-m" />
<arg value="--non-constant-id" /> <!-- 加了这个参数-->
<arg value="-J" />
<arg value="${outdir-gen}" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-S"/>
<arg value="../appcompat_v7/res"/>
<arg value="-M" />
<arg value="../appcompat_v7/AndroidManifest.xml" /> <!-- 库应用的manifest-->
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="--auto-add-overlay" />
</exec>
</target>

 <!-- 第三方lib 库结束-->

我工程里引用的是appcompat_v7 lib工程。

注意:在编译aidl文件时的任务依赖此时要依赖两个

<target name="aidl" depends="gen-R,gen-R1">

2、编译java文件

<!-- 将工程中的java源文件编译成class文件 -->
<target name="compile" depends="aidl">
<echo>java源文件编译成class文件....</echo>
<javac encoding="utf-8" target="1.7" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}" verbose="false">
   <src path="../appcompat_v7/src"/>
<compilerarg line="-encoding UTF-8 " />
<classpath>
<fileset dir="${external-lib}" includes="*.jar" />
<!-- 引用第三方lib库   开始 -->
<fileset dir="../appcompat_v7/libs" includes="*.jar"/>
<!-- 引用第三方lib库   结束 -->
</classpath>
</javac>
</target>

3、将class文件进行混淆

 <!-- 将class文件进行混淆 -->

  <target name="optimize" depends="compile">
<echo>开始进行代码混淆...</echo>
<jar basedir="${outdir-classes}" destfile="${unoptimized}" />
<java jar="${sdk-tools}/proguard/lib/proguard.jar" fork="true" failonerror="true">
<!-- Dmaximum.inlined.code.length 默认值为8 设置内联代码的长度 -->
<jvmarg value="-Dmaximum.inlined.code.length=32" />
<!-- 指定配置文件 -->
<arg value="-libraryjars ${android-jar}" />
<arg value="-libraryjars ../appcompat_v7/libs/android-support-v4.jar" />
<arg value="-libraryjars ../appcompat_v7/libs/android-support-v7-appcompat.jar" />
<arg value="@proguard-android.txt" />
<arg value="-injars ${unoptimized}" />
<arg value="-outjars ${optimized}" />
</java>
<delete dir="${outdir-classes}" />
<mkdir dir="${outdir-classes}" />
<unzip src="${optimized}" dest="${outdir-classes}" />
<delete file="${unoptimized}" />
<delete file="${optimized}" />
<echo>代码混淆完成...</echo>
</target> 

4、生成dex文件

 <!-- 将.class文件转化成.dex文件 -->
<target name="dex" depends="optimize">
<echo>将.class文件转化成.dex文件....</echo>
<exec executable="${dx}" failonerror="true">
<arg value="--dex" />
<!-- 输出文件 -->
<arg value="--output=${dex-ospath}" />
<!-- 要生成.dex文件的源classes和libraries -->
<arg value="${outdir-classes-ospath}" />
<arg value="${external-lib-ospath}" />
<!-- 引用第三方lib库   开始 -->
<arg value="../appcompat_v7/libs"/>
<!-- 引用第三方lib库   结束 -->
</exec>
</target>

5、打包资源

  <!-- 将资源文件放进输出目录 -->
<target name="package-res-and-assets">
<echo>将资源文件放进输出目录....</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="${manifest-xml}" />
<arg value="-S" />
<arg value="${resource-dir}" />

<!-- 引用第三方lib库   开始 -->
<arg value="-S"/>
<arg value="../appcompat_v7/res"/>
<!-- 引用第三方lib库   结束 -->
<arg value="-A" />
<arg value="${asset-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
<!-- 引用第三方lib库   开始(允许覆盖资源) -->
<arg value="--auto-add-overlay" />
<!-- 引用第三方lib库   结束 -->
</exec>
</target>

修改以上步骤后运行就可编译引用第三方lib工程的android工程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: