一、背景
最近我负责的项目要添加混淆,有点小棘手,之前只是知道有这么东西,但是没有真正做过代码的混淆,于是各种google,在此记录一下
二、混淆
工具:as+4.4
1.首先在项目的gradle中开启混淆
在android->buildTypes->debug or release节点中设置 minifyEnabled 为true
2.修改proguard-rules.pro文件
修改这个文件首先要知道混淆的一些基本的原则
①混淆只是混淆我们自己的代码
②过滤掉第三方的jar包和依赖
③项目中的实体不能混淆,否则json解析不出来
④android中自己的组件不能混淆
只要把握住这几个规则一般都不会有问题
贴一下我们项目的混淆
#基本混淆代码 贴到项目中就能用
-dontshrink
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-ignorewarnings#忽略警告 也可以用
-dontwarn
-allowaccessmodification
-dontskipnonpubliclibraryclassmembers
-keepattributes *Annotation*
#android中不加混淆的类
-keep public class com.huimin.shop.huiminshop.base.F{*;}
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.v7.**
#===================================================================================================
#Picasso混淆
-keep class com.squareup.picasso.* {*;}
#fastjson混淆
-keep class com.alibaba.fastjson.** { *; }
#Gson混淆
-keep class com.goole.gson.**{*;}
#bean实体屏蔽混淆
-keep class com.huimin.shop.huiminshop.classify.entity.**{ *; }
-keep class com.huimin.shop.huiminshop.homepage.entity.**{ *; }
-keep class com.huimin.shop.huiminshop.mycenter.entity.**{ *; }
-keep class com.huimin.shop.huiminshop.shopcar.entity.**{ *; }
#cobub
-keep class com.wbtech.ums.**{*;}
#xutils混淆
-keep class org.xutils.** { *; }
#百度地图
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
基本配置没太多研究,看字面意思可以大概能明白每个配置都是干嘛的
所谓不加混淆的类就是android自身的组件,环境及goole提供的support包
第三方包格式都固定,可以自己手动找到用到的类然后逐个屏蔽,也可以把整个包都屏蔽,这里都是把整个包都屏蔽了;一般来说第三方关于混淆的内容在第三方的官网都会有说明也可以自己逐个进入官网看看
三、小结
在混淆时遇到了两个问题
1.重复混淆,对于libs下的jar混淆自己写了两遍,导致签名打包时编译通不过
2.最开始一直没有对bean实体进行混淆,导致每次打完包安装到手机上都没有数据,反复搞了好几次,改了n多次配置都不行,然后看了看安装后项目运行打出的日志,发现网络请求成功,但是就是显示不出来,于是定位到bean,把所有bean屏蔽混淆后,问题解决