以下脚本只需要修改<!-- you can change it -->部分即可,总共6处,满足大部分的场景,
包括了proguard,工程目录下需要有proguard.cfg文件。
附带一句,如果proguard中要去除debug日志,可以在proguard.cfg文件中加入以下内容:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
以下是build.xml的内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="release" name="工程名称"><!-- you can change it -->
<property environment="env"/>
<property name="ECLIPSE_HOME" value="F:/Tools/Develop/eclipse"/> <!-- you can change it -->
<property name="ANDROID_SDK_PATH" value="F:/Tools/Develop/android_sdk"/> <!-- you can change it -->
<property name="debuglevel" value="source,lines,vars"/>
<property name="vm.target" value="1.6"/>
<property name="vm.source" value="1.6"/>
<property name="android.target" value="android-17"/> <!-- you can change it -->
<tstamp>
<format property="TODAY" pattern="yyyy-MM-dd HHmmss" locale="zh_CN"/>
</tstamp>
<property name="release.home" value="${basedir}/release"/>
<property name="release.name" value="输出sdk的名称"/> <!-- you can change it -->
<property name="release.version" value="v1.1.20"/> <!-- you can change it -->
<property name="release.jar" value="${release.home}/${release.name}-${release.version}.jar"/>
<!-- debug版本没有用proguard混淆,release版本混淆了 -->
<property name="debug.jar" value="${release.home}/${release.name}-${release.version}_debug.jar"/>
<property name="proguard.home" value="${ANDROID_SDK_PATH}/tools/proguard"/>
<property name="proguard.map" value="${release.home}/map_${TODAY}.txt"/> <!-- 输出map,便于问题定位 -->
<property name="android.jar" value="${ANDROID_SDK_PATH}/platforms/${android.target}/android.jar"/>
<path id="Android libraryclasspath">
<pathelement location="${android.jar}"/>
</path>
<path id="Android Dependencies.libraryclasspath"/>
<path id="Android Private Libraries.libraryclasspath"/>
<path id="Project.classpath">
<path refid="Android libraryclasspath"/>
<path refid="Android Dependencies.libraryclasspath"/>
<path refid="Android Private Libraries.libraryclasspath"/>
<pathelement location="${basedir}/classes"/>
</path>
<target name="init">
<mkdir dir="${release.home}"/>
<mkdir dir="${release.home}/classes"/>
<copy includeemptydirs="false" todir="${release.home}/classes">
<fileset dir="${basedir}/src">
<exclude name="**/*.launch"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy includeemptydirs="false" todir="${release.home}/classes">
<fileset dir="${basedir}/gen">
<exclude name="**/*.launch"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
<!-- copy assets目录下的内容,可以打包到sdk中 -->
<copy includeemptydirs="false" todir="${release.home}/classes/assets" includeEmptyDirs="false">
<fileset dir="${basedir}/assets">
<include name="**/**" />
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${release.home}" failοnerrοr="false"/>
</target>
<target name="build" depends="clean, init">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="${release.home}/classes" includeantruntime="false"
source="${vm.source}" target="${vm.target}" encoding="utf-8">
<src path="src"/>
<src path="gen"/>
<classpath refid="Project.classpath"/>
</javac>
<jar destfile="${debug.jar}" strict="fail">
<fileset dir="${release.home}/classes">
<include name="**/*.class"/>
<include name="assets/**"/>
</fileset>
<manifest>
<attribute name="Implementation-Title" value="${release.project}-${release.version}.jar" />
<attribute name="Implementation-Version" value="${release.version}" />
<attribute name="Implementation-Vendor" value="huawei"/>
<attribute name="BuildTime" value="${current_time}" />
</manifest>
</jar>
</target>
<target name="release" unless="nooptimize" depends="build">
<echo>Proguard ${release.name}...</echo>
<java jar="${proguard.home}/lib/proguard.jar" fork="true" failοnerrοr="true">
<jvmarg value="-Dmaximum.inlined.code.length=16" />
<arg value="@${basedir}/proguard.cfg" />
<arg value="-injars ${debug.jar}" />
<arg value="-outjars ${release.jar}" />
<arg value="-libraryjars ${android.jar}" />
<arg value="-printmapping ${proguard.map}" />
</java>
</target>
</project>