填坑
- proguard 本身是没啥问题的,所以一般出问题大概率不会因为proguard
- proguard 是基于规则进行混淆的,若是出问题大概率出现在你的规则上
- 规则问题,一般都是规则覆盖不全导致的
- 模板规则对于普通代码是没问题的,但是对于采用特殊代码实现的就覆盖不上了
- 比如反射,反射一般有两种方案
- 一种是调用java的反射库
- 一种就是直接写死代码,编译时让编译系统认为是系统类,不会报错,正常编译
- 调用反射库的,除非反射的是系统类,否则必须要新增规则才能覆盖上
- 写死代码的,若是不新增规则进行覆盖,则proguard会认为是普通代码,而直接写死代码时,有些函数可能不会被自身调用,导致被混淆掉,这时就需要新增规则进行适配
- 如何定位代码呢,就是采用
-keep
进行一个个排除即可,或者直接分析代码,看哪些地方会调用反射或写死代码
- 记住:所有的
-keep
都是为反射服务的,没有-keep
解决不了的反射问题
声明:转载请注明出处,原文地址:shlu's note