一、安装与配置Ant
添加系统环境变量:ANT_HOME,该变量指向Ant解压后的根目录,在系统环境变量path中添加Ant的bin目录(%ANT_HOME%\bin)。
二、更新Android项目
运行cmd命令:android update project -t sdk版本编号 -p 项目根目录
该命令需要先配置系统path,不配置也可以,直接调起批处理文件:AndroidSdk安装目录\tools\android.bat
sdk版本编号可通过该命令列出:android list targets
运行后,项目的根目录将生产 build.xml 及 local.properties
三、修改配置文件
按个人喜好编写即可,以下是仅供参考:
local.properties
sdk.dir=D:\\Program Files\\adt-bundle-windows\\sdk
diyJavaFilePath=bld/java
diyClassFilePath=bld/class
diyClsJarFile=bld/src.jar
diyOptJarFile=bld/blur.jar
diyDexFileFolder=bld
diyReleaseFilePath=bld/release.jar
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="antMain" default="dex_jar">
<property file="local.properties" />
<property file="ant.properties" />
<property environment="env" />
<loadproperties srcFile="project.properties" />
<import file="custom_rules.xml" optional="true" />
<import file="${sdk.dir}/tools/ant/build.xml" />
<!-- 引入Android依赖 -->
<property name="lib.android" value="${sdk.dir}\platforms\${target}\android.jar"/>
<!-- 引入混淆依赖 -->
<property name="lib.proguard" value="${sdk.dir}\tools\proguard\lib\proguard.jar"/>
<!-- 引入lib依赖 -->
<property name="lib.selflib" value="E:\java\workspace\base\bin\base.jar"/>
<!-- 混淆命令(当前系统为windows,如果系统为linux,可将.bat文件替换成相对应的命令) -->
<property name="dx" value="${sdk.dir}\build-tools\android-4.4.2\dx.bat" />
<!-- 声明依赖的jar -->
<path id="dependencies">
<fileset dir="E:\java\workspace\">
<include name="base/bin/*.jar" />
</fileset>
</path>
<!-- 拆分java文件(通过拷贝命令) -->
<target name="separate_java">
<!-- diyJavaFilePath自定义java文件存放的文件路径 -->
<delete dir="${diyJavaFilePath}" />
<mkdir dir="${diyJavaFilePath}" />
<copy todir="${diyJavaFilePath}">
<fileset dir="${basedir}/src">
<include name="com/**/*.java" />
</fileset>
<fileset dir="${basedir}/gen">
<include name="com/**/*.java" />
</fileset>
</copy>
</target>
<!-- 编译java文件(生成class文件) -->
<target name="compile_java" depends="separate_java">
<!-- diyClassFilePath自定义class文件存放的文件路径 -->
<delete dir="${diyClassFilePath}" />
<mkdir dir="${diyClassFilePath}" />
<javac encoding="UTF-8" target="1.6" debug="false" extdirs=""
srcdir="${diyJavaFilePath}"
destdir="${diyClassFilePath}"
includeAntRuntime = "false"
bootclasspath="${lib.android}">
<classpath refid="dependencies" />
</javac>
</target>
<!-- 混淆class文件 -->
<target name="optimize_class" depends="compile_java">
<!-- diyClsJarFile自定义原始JAR文件名 -->
<delete file="${diyClsJarFile}"/>
<jar destfile="${diyClsJarFile}">
<fileset dir="${diyClassFilePath}" includes="**/*.class"/>
</jar>
<!-- diyOptJarFile自定义混淆JAR文件名 -->
<delete file="${diyOptJarFile}"/>
<java jar="${lib.proguard}" fork="true" failοnerrοr="true">
<jvmarg value="-Dmaximum.inlined.code.length=32"/>
<arg value="-injars ${diyClsJarFile}"/>
<arg value="-outjars ${diyOptJarFile}"/>
<arg value="-libraryjars ${lib.android}"/>
<arg value="-dontpreverify"/>
<arg value="-dontoptimize"/>
<arg value="-dontusemixedcaseclassnames"/>
<arg value="-allowaccessmodification"/>
<arg value="-optimizationpasses 7"/>
<arg value="-verbose"/>
<arg value="-dontskipnonpubliclibraryclasses"/>
<arg value="-dontskipnonpubliclibraryclassmembers"/>
<!-- 在这里添加混淆配置 -->
<arg value="-keepattributes Exceptions,*Annotation*,EnclosingMethod"/>
<arg value="-keep public class com.**.*{public <fields>;<methods>;}"/>
</java>
</target>
<!-- DEX-JAR文件 -->
<target name="dex_jar" depends="optimize_class">
<!-- 自定义dex文件路径 -->
<delete file="${diyDexFileFolder}/classes.dex"/>
<exec executable="${dx}" failοnerrοr="true">
<arg value="--dex" />
<arg value="--output=${diyDexFileFolder}/classes.dex" />
<arg value="${diyOptJarFile}" />
<arg value="${basedir}/libs" />
</exec >
<!-- 自定义将dex文件打成Jar包后的文件路径 -->
<delete file="${diyReleaseFilePath}"/>
<jar destfile="${diyReleaseFilePath}">
<fileset dir="${basedir}/${diyDexFileFolder}">
<include name="**/*.dex" />
</fileset>
</jar>
</target>
<!-- 执行命令(可选操作):java -jar jarName args -->
<target name="cmd_jar" depends="dex_jar">
<java jar="${jarUtilName}" fork="true" failοnerrοr="true">
<jvmarg value="-Dmaximum.inlined.code.length=32"/>
<arg value="${arg1}"/>
<arg value="${arg2}"/>
<arg value="${arg3}"/>
<!-- arg4... -->
</java>
</target>
<!-- 合并文件(可选操作) -->
<target name="release" depends="dex_jar">
<delete file="${file_release}"/>
<!--
举例将 ${diyFileA}与 ${diyFileBPath}/${diyFileBName}打到一起
最终目录结构:
${diyFileA}
assets/${diyFileBName}
-->
<jar destfile="${file_release}">
<zipfileset src="${diyFileA}"/>
<zipfileset dir="${basedir}/${diyFileBPath}" prefix="assets">
<include name="${diyFileBName}"/>
</zipfileset>
</jar>
</target>
</project>
在项目的根目录运行ant命令,即可生产混淆后的jar包(在项目根目录的bld文件夹下)。
本方法适用于作为LIB的JAR包开发,若需要生产DEX文件、生成APK文件、对APK签名等操作还需要更多的工作。