在网上看了很多关于android混淆打包的帖子,但是真正能解决问题的很少,特别对于版本较高的android项目。本篇主要解决混淆打包出现的问题以及打包签名之后出现问题。
在高版本的android项目中,里边没有了proguard.cfg,取而代之的是proguard-project.txt。
我们需要在project.properties中添加上这行代码
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
然后所有的混淆都在这个proguard-project.txt文件里进行说明:
一、首先我们不需要混淆第三方的东西,只需要混淆自己写的代码就行了。这点很重要,不然很容易出错哦
二、如何不混淆第三方,这才是关键
如果引入了第三方的library中包含jar,我们也不让他们混淆,防止混淆出错
引入方法:
-libraryjars ../第三方库的工程名/libs/**.jar
例:
-libraryjars ../duoshuo-android-sdk/libs/jackson-annotations-2.2.3.jar
如果直接引入的是sdk的jar包,引入方法:
#(声明lib文件)-libraryjars **.jar
#(不提示警告)-dontwarn com.xx.xxx.**
#(不进行混淆)-keep class com.xx.xxx.** { *;}
三、常见问题
1.保持泛型不被混淆
-keepattributes Signature
2.ExceptionInitializerError错误,原因:是由于类初始化的时候发生了异常,有可能人家用到了类的注解,而Produard在混淆优化的时候把注解去掉了,解决办法:在Proguard里面加上注解保护
-keepattributes *Annotation*
3.不混淆R文件
proguard-project.txt 文件下载地址:-keep class **.R$* { *; }
包含了友盟的、信鸽、apache,大家可以借鉴一下
http://download.csdn.net/detail/shr957250701/7749043