当前位置: 代码迷 >> Android >> Android封装之Ant打入第三方jar包
  详细解决方案

Android封装之Ant打入第三方jar包

热度:71   发布时间:2016-04-28 06:36:46.0
Android打包之Ant打入第三方jar包

Android打包之将bat脚本转换成ant脚本》实现了ant打包,只是需要打入第三方jar包时,需要对其中的compie和dex部分进行修改,下面是实现的ant脚本。

build.xml

<?xml version="1.0" encoding="UTF-8"?><project    name="AntDemo"    default="release" >    <property        name="sdk-folder"        value="D:\android-sdk-windows" />    <property        name="platform-folder"        value="${sdk-folder}\platforms\android-8" />    <property        name="platform-tools-folder"        value="${sdk-folder}\platform-tools" />    <property        name="jdk-folder"        value="D:\Program Files (x86)\Java\jdk1.6.0_45" />    <!-- tools -->    <property        name="android-jar"        value="${platform-folder}\android.jar" />    <property        name="tools.aapt"        value="${platform-tools-folder}\aapt.exe" />    <property        name="tools.javac"        value="${jdk-folder}\bin\javac.exe" />    <property        name="tools.dx"        value="${platform-tools-folder}\dx.bat" />    <property        name="tools.apkbuilder"        value="${sdk-folder}\tools\apkbuilder.bat" />    <property        name="tools.jarsigner"        value="${jdk-folder}\bin\jarsigner.exe" />    <!-- dir -->    <property        name="project-dir"        value="G:\Code\Android\Workspace\AntDemo" />    <property        name="res"        value="${project-dir}\res" />    <property        name="gen"        value="${project-dir}\gen" />    <property        name="src"        value="${project-dir}\src" />    <property        name="bin"        value="${project-dir}\bin" />    <property        name="assets"        value="${project-dir}\assets" />    <property        name="libs"        value="${project-dir}\libs" />    <!-- files -->    <property        name="manifest"        value="${project-dir}\AndroidManifest.xml" />    <property        name="java-file-gen"        value="${gen}\com\example\antdemo\*.java" />    <property        name="java-file-src"        value="${src}\com\example\antdemo\*.java" />    <property        name="dex-name"        value="${bin}\classes.dex" />    <property        name="pakcage-temp-name"        value="${bin}\${ant.project.name}" />    <property        name="unsigned-apk-name"        value="${ant.project.name}_unsigned.apk" />    <property        name="unsigned-apk-path"        value="${bin}\${unsigned-apk-name}" />    <property        name="signed-apk-name"        value="${ant.project.name}.apk" />    <property        name="signed-apk-path"        value="${bin}\${signed-apk-name}" />    <property        name="keystore-name"        value="${project-dir}\my.keystore" />    <property        name="keystore-alias"        value="ant_test" />    <!-- task -->    <target name="init" >        <echo>Initialize...        </echo>        <delete dir="${bin}" />        <mkdir dir="${bin}" />    </target>    <target        name="gen-R"        depends="init" >        <echo>Generating R.java from the resources...         </echo>        <exec            executable="${tools.aapt}"            failonerror="true" >            <arg value="package" />            <arg value="-f" />            <arg value="-m" />            <arg value="-J" />            <arg value="${gen}" />            <arg value="-S" />            <arg value="${res}" />            <arg value="-M" />            <arg value="${manifest}" />            <arg value="-I" />            <arg value="${android-jar}" />        </exec>    </target>    <target        name="compile"        depends="gen-R" >        <echo>Compile...        </echo>        <javac            bootclasspath="${android-jar}"            compiler="javac1.6"            target="1.6"            destdir="${bin}"            encoding="utf-8"            includeAntRuntime="true"            listfiles="true">                        <src path="${project-dir}"/>             <classpath>                 <fileset dir="${libs}" includes="*.jar" /><!-- 引用第三方jar包需要引用,用于辅助编译,并没有将jar打包进去。jar的打包在dex命令中。-->            </classpath>        </javac>    </target>    <target        name="dex"        depends="compile" >        <echo>Generate dex...        </echo>        <exec            executable="${tools.dx}"            failonerror="true" >            <arg value="--dex" />            <arg value="--output=${dex-name}" />            <arg value="${bin}" /><!-- classes文件位置 -->                        <arg value="${libs}"/><!-- 把libs下所有jar打包 -->        </exec>    </target>    <target        name="package"        depends="dex" >        <echo>   Package resource and assets...        </echo>        <exec            executable="${tools.aapt}"            failonerror="true" >            <arg value="package" />            <arg value="-f" />            <arg value="-A" />            <arg value="${assets}" />            <arg value="-S" />            <arg value="${res}" />            <arg value="-I" />            <arg value="${android-jar}" />            <arg value="-M" />            <arg value="${manifest}" />            <arg value="-F" />            <arg value="${pakcage-temp-name}" />        </exec>    </target>    <target        name="build-unsigned-apk"        depends="package" >        <echo>  Build unsigned apk        </echo>        <exec            executable="${tools.apkbuilder}"            failonerror="true" >            <arg value="${unsigned-apk-path}" />            <arg value="-v" />            <arg value="-u" />            <arg value="-z" />            <arg value="${pakcage-temp-name}" />            <arg value="-f" />            <arg value="${dex-name}" />            <arg value="-rf" />            <arg value="${src}" />        </exec>    </target>    <target        name="sign-apk"        depends="build-unsigned-apk" >        <echo>  Sign apk        </echo>        <exec            executable="${tools.jarsigner}"            failonerror="true" >            <arg value="-keystore" />            <arg value="${keystore-name}" />            <arg value="-storepass" />            <arg value="123456" />            <arg value="-keypass" />            <arg value="123456" />            <arg value="-signedjar" />            <arg value="${signed-apk-path}" />            <arg value="${unsigned-apk-path}" />            <arg value="${keystore-alias}" />        </exec>    </target>    <target        name="release"        depends="sign-apk" >        <delete file="${pakcage-temp-name}" />        <delete file="${unsigned-apk-path}" />        <echo>APK is released. path:${signed-apk-path}        </echo>    </target></project>

注:

1、compile部分的classpath所引用的jar包是为了辅助编译的,并没有将jar打包进去。dex部分最后的一个参数${libs}才是真正将第三方jar包打包进去的部分,即将其打包到classes.dex中。

2、compile中的compiler是特别指定所用的javac,listfiles为true是显示编译过程中编译的文件。

3、includeAntRuntime:其作用是指定编译任务是否包含ant的classpath,在Ant1.8版以后如果没有设置该选项会弹出警告“warning: ‘includeantruntime’ was not set”。在Ant 总会把它自己的 runtime包含进对 javac 任务可见的 classpath中。因此,任何与Ant有关的库都会自动进入你的构建类路径,不管你是否需要它们。这对大部分人来说可能是没必要的,因此,新的Ant版本提供了这个选项。新版本不提供默认值是为了保证早期构建文件的可移植性,即在不同Ant版本下,构建文件都能保持一致的行为

4、src相当于javac中的srcdir。src可以是多个。

源码下载

  相关解决方案