最近一个项目上线,要求代码混淆,可混淆后某些控件的点击事件无效,后来发现是afinal注解的问题。查了半天资料,后来又问了afinal的相关人员,他们给出的解决方案是排除混淆被注解的类,这样的话意味着基本所有的activity和fragment都不能混淆,这不是我想要的。
后来反编译代码比较排除被注解的类和不排除被注解类的区别,比较发现,那些不能点击的控件的定义代码被优化掉了,被优化掉的原因就是因为用注解后,在代码中该控件的实例没有其他地方用到,所以程序就认为该代码没有被用到,就被注视掉了。
知道问题那解决办法就有了,在混淆配置中加入-dontshrink,使代码不被压缩优化,加上它后发现混淆后的代码并未比原来增加多少,如果介意的话那只能排除被注解的类或者不再用afinal的注解。