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^)/ 。

更多相关文章

  1. 64位Ubuntu配置android环境报错(...adb": error=2, 没有那个文件
  2. android中使用properties文件配置
  3. Android布局文件属性
  4. android从raw里面读取txt文件
  5. android直接找一个文件,部分编译等实用
  6. Android 保存文件路径方法
  7. Android 下的usb框架及功能点
  8. Android引用百度定位API第三方组件后导致其它.so文件无法正常加

随机推荐

  1. Android应用程序组成部分
  2. Android中使用网络技术
  3. android bluetooth----bluetoothClass.Se
  4. OrmLite for android--Ormlite的大概介绍
  5. android M上可能需要开发者注意的权限大
  6. Ubuntu 将adb加入环境变量 及adb shell
  7. android 10 问题汇总
  8. wm8976的Android 2.2移植到Android2.3上
  9. Android注册广播两种方式的区别
  10. CheckBox控件中background和button的区别