本文的目的是介绍怎么样配置android的ant自动化编译脚本,来实现编译发布版本时代码的混淆和代码的优化,利用的主要工具包括ant和proguard。
编译环境
- ant 版本 1.8.4
F:\workspace\eReader>ant -version Apache Ant(TM) version 1.8.4 compiled on May 22 2012
- java 版本 1.7
F:\workspace\eReader>java -version java version "1.7.0_05" Java(TM) SE Runtime Environment (build 1.7.0_05-b05) Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)
文件配置
因为 Android 已经内置了 proguard 的支持,所以我们只需要进行配置启用该功能即可。
- 生成 build.xml 文件
F:\workspace\eReader>android update project -p .
- 配置 local.properties 文件
sdk.dir会自动指向当前系统android的开发环境路径,key.store和key.alias分别指向签名文件和签名文件的别名,这个需要自己制作,主要是release的时候需要使用sdk.dir=E:\\PROGRA~1\\android-sdk-windows key.store=F:\\Android\\android_key\\careychow.keystore key.alias=Carey
- 配置 build.xml 文件
配置签名算法为 SHA1<?xml version="1.0" encoding="UTF-8"?> <project name="GAReader" default="help"> .... 此处省略若干 <presetdef name="signjar"> <signjar sigalg="MD5withRSA" digestalg="SHA1" /> </presetdef> </project>
自动化编译
- 执行编译命令 ant release
F:\workspace\eReader>ant release
- 输入签名密钥的密码和签名别名的密码进行签名
...... -release-prompt-for-password: [input] Please enter keystore password (store:F:\Android\android_key\careych ow.keystore): careychow [input] Please enter password for alias 'Carey': careychow ...... -release-sign: [echo] Signing final apk... [signjar] Signing JAR: F:\workspace\eReader\bin\GAReader-release-unsigned.apk to F:\workspace\eReader\bin\GAReader-release-unaligned.apk as Carey [signjar] 输入密钥库的密码短语: [zipalign] Running zip align on final apk... [echo] Release Package: F:\workspace\eReader\bin\GAReader-release.apk [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop -post-build: release: BUILD SUCCESSFUL Total time: 1 minute 36 seconds
常见错误
- 去除 proguard 的警告信息,尤其在自己引用第三方library的时候, 代码混淆的过程中,proguard分析当前所有的类库,会警告有些类或者方法无法识别,因为这些都是第三方library自己编译的,我们无法再去找它所依赖的其他包,只需要配置忽略这些警告即可,方法如下:
配置 proguard.cfg 文件,在文件的最后加上要忽略的类...... -dontwarn java.awt.**,antlr.**,org.junit.**,jargs.gnu.**
- 解决签名错误 INSTALL_PARSE_FAILED_NO_CERTIFICATES
目前在JDK7的版本和ant1.8.4会出现这个问题,如果不指明所使用的签名算法,则APK就无法正确签名,在安装的过程中就会出现如上的错误信息,解决办法就是在build.xml中指明签名算法。
还有另外的解决方法,可参照如下文章:
总结
配置和启用的过程倒是不复杂,主要就是出现的一些版本兼容问题比较难解决,好了,内容就讲解这么多!