Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2019-07-30:谈谈代码混淆的步骤?

Moosphan opened this issue · comments

2019-07-30:谈谈代码混淆的步骤?

混淆,没有啥东西,该留下留下,该混淆混淆,最多问题找不到,我遇到小米手机可以安卓,华为手机不你能安卓,后来检查出来是华为推送问题,加混淆最好是,弄完以后找百度或者360等去免费测试一遍,多机型跑一遍,混淆宁愿多留点,不要干的太彻底,你不确定的就别混淆,

开启混淆开关

需要添加的混淆规则:1、查看项目使用的第三方库哪些需要特殊配置混淆的
2、保持反射 native 对应的类和方法不混淆
3、保持实体类参与系列化的不混淆
4、保持自定义类不混淆
5、系统组件如fragment activity servie等一些固定方法会被系统调用不混淆

开启混淆

  1. 查看项目使用的第三方哪些需要设置混淆
  2. 保持反射native对应的类和方法不混淆
  3. 保持自定义类不混淆
  4. 保持实体类参与序列化的不混淆
  5. 系统组件等一些固定方法会被系统调用的不混淆

实体类参与序列化的不混淆??
只有需要用到反射的实体类才不混淆吧,比如没有注解的json,其他的都完全可以混淆
另外补充一点如果是自己的sdk要混淆,注意打release包时添加dontshrink

:octocat: From gitme iOS

commented

1,加入基本的混淆规则:优化配置、activity+Fragment等不混淆、序列化的类不混淆这些常见基础配置

2,查看代码中有哪些第三方,将第三方的库对应的代码进行不混淆配置

3,测试,混淆后,将各个模块的代码跑一次,再一个模块一个模块检查

webview设置的JavascriptInterface对象不要混淆

代码混淆的目的:
1、代码混淆之后会随机生成难易理解的类名、方法名以及属性名,加大反编译的难度;
2、可以对apk进行优化,缩小包的体积;

代码混淆的步骤:
1、在gradle文件里面打开配置:minifyEnabled true;
2、在proguard-rules.pro 文件里面配置混淆规则;
在配置混淆的时候,需要注意:1、四大组件以及view可以不进行混淆;2、实体类不进行混淆;3、第三方库根据各自的要求配置混淆规则;

配置代码混淆minifyEnabled true
配置混淆规则proguard-rules.pro