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'
  • 1

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

之后使用签名打包运行后使用分享就会崩溃,当把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.**{*;}
  • 1

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

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

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

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

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

javax.mail.NoSuchProviderException: smtp
  • 1

仔细查看代码中用到类所在的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.**{*;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

คิดถึง643

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值