关于程序中使用反射时混淆造成的问题

来源:互联网 发布:php倒计时钟代码 编辑:程序博客网 时间:2024/05/25 20:00

最近项目中用到了反射来调用类中的方法,此外,这些被调用的方法不会被显式的调用。因此正常情况下看来,这些类是无人引用的冗余文件。同时,由于项目上线时需要进行混淆,那么问题就来了,发现混淆后通过反射调用的方法都无法运行了。通过跟log发现,都抛出了ClassNotFound的异常。

根据异常想起来忘记在混淆时对这些类进行keep操作了,加上就好了。本着好奇的心态,对混淆编译好的apk进行了反编译,发现不仅仅是因为混淆修改了类名而找不到类,而是混淆之后根本就没有这个类了!!!

后来查了下才知道,混淆时proguard会对程序进行压缩和优化,那么这些没有被显示调用到的类就会被当成冗余文件压缩掉了~万幸防止被压缩和防止被混淆都可以通过keep操作实现,加上keep之后就ok了~