Android:混淆打包后出现的各种问题
16lz
2021-01-23
Android:混淆打包后出现的各种问题
最近看一些关于混淆应用的文章,于是在自己的应用中引入了混淆文件proguard-android.txt
设置使用混淆:
// 不显示LogbuildConfigField "boolean", "LOG_DEBUG", "false"//混淆minifyEnabled true//Zipalign优化zipAlignEnabled true// 移除无用的resource文件shrinkResources trueproguardFiles 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^)/ 。
更多相关文章
- 64位Ubuntu配置android环境报错(...adb": error=2, 没有那个文件
- android中使用properties文件配置
- Android布局文件属性
- android从raw里面读取txt文件
- android直接找一个文件,部分编译等实用
- Android 保存文件路径方法
- Android 下的usb框架及功能点
- Android引用百度定位API第三方组件后导致其它.so文件无法正常加