Android:混淆打包后出现的各种问题

Android:混淆打包后出现的各种问题

最近看一些关于混淆应用的文章,于是在自己的应用中引入了混淆文件proguard-android.txt
设置使用混淆:

// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

首先发现的是分享功能没法使用:

之后使用签名打包运行后使用分享就会崩溃,当把minifyEnabled zipAlignEnabled shrinkResources设置为false
再次签名打包使用分享可以调出微博客户端,这样问题就明显了,使用混淆导致微博的jar和so文件无法引用,找到proguard-android.txt 对引用的第三方jar、类库进行保护:

## keep class 包名.* 保持包名下的所有类不被混淆
-dontwarn com.tencent.mm.**
-keep class com.tencent.mm.**{*;}
-dontwarn com.sina.**
-keep class com.sina.**{*;}

再次使用打包,使用分享成功分享。

之后测试发现很多引用第三方jar 以及自定义的view都不能正常使用:

这样就尴尬了,混淆后各种问题,既然混淆了就不能不解决,找到自己的自定义view的包名保持不混淆:

-keep class com.packagename.widget.**{*;}

相关是项目是个人的app 所以加入了邮件发送,同样混淆后就有这样的错误:

javax.mail.NoSuchProviderException: smtp

仔细查看代码中用到类所在的jar,一个一个设置不混淆:

## 邮件发送保持不混淆
-keep class org.apache.**{*;}
-keep class org.apache.commons.mail.**{*;}
-keep class javax.mail.**{*;}
-keep class javax.activation.**{*;}
-keep class com.sun.activation.registries.**{*;}
-keep class com.sun.mail.** {*;}
-keep class myjava.awt.datatransfer.**{*;}

终于完事,各种问题搞得头已炸!走过的坑,踩过的雷,留下一个小红旗,希望后面的小伙伴别入坑踩雷 (^o^)/ 。

你可能感兴趣的:(Android)