<target name="-release-obfuscation-check">
<echo level="info">proguard.config is ${proguard.config}</echo>
<condition property="proguard.enabled" value="true" else="false">
<and>
<isset property="build.is.mode.release" />
<isset property="proguard.config" />
</and>
</condition>
<if condition="${proguard.enabled}">
<then>
<echo level="info">Proguard.config is enabled</echo>
<!-- Secondary dx input (jar files) is empty since all the
jar files will be in the obfuscated jar -->
<path id="out.dex.jar.input.ref" />
</then>
</if>
</target>
proguard.enabled的依据就是在release模式下,并且设置proguard.config这个属性
签名规则:签名过程中需要检查keystore和密码
<target name="-release-sign" if="has.keystore" >
<!-- only create apk if *not* a library project -->
<do-only-if-not-library elseText="Library project: do not create apk..." >
<sequential>
<property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-release-unaligned.apk" />
<!-- Signs the APK -->
<echo level="info">Signing final apk...</echo>
<signapk
input="${out.packaged.file}"
output="${out.unaligned.file}"
keystore="${key.store}"
storepass="${key.store.password}"
alias="${key.alias}"
keypass="${key.alias.password}"/>
<!-- Zip aligns the APK -->
<zipalign-helper
in.package="${out.unaligned.file}"
out.package="${out.final.file}" />
<echo level="info">Release Package: ${out.final.file}</echo>
</sequential>
</do-only-if-not-library>
<record-build-info />
</target>
自定义打包规则:
在 build.xml 中导入自定义的打包规则的文件, <import file="custom_rules.xml" optional="true" />
然后 可根据 release中的规则和顺序(depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"),自定义自己的规则。
在custom_rules.xml中 重新实现这些字段对应的规则方法。一般都在最后一项“-post-bulid”中完成。
如xxxxx项目中,在编译之前先检查libs库中的.so文件是否一致 和 签名采用自己的签名服务器去做等。实现代码如下:
classname="com.netease.apkchecker.AllSoChecker"
classpath="apkchecker.jar" />
<target name="-post-build" depends="custom_sign,protect" >
<SoChecker apkPath="${out.final.file}" />