RePlugin
RePlugin copied to clipboard
引入第三方混淆jar中存在大小都存在的类,插件化处理后ClassNotFound
问题详细描述 Detailed description of the problem
引入混淆过的第三方jar,第三方jar中的类名大小都存在时,可能导致插件化处理后类丢失
例如三方jar中存在A.class, a.class,插件化方案可能对大小写不敏感,或者编译的操作系统对大小写不敏感,导致输出的apk丢失部分类,造成ClassNotFound
复现问题步骤 Steps to reproduce the problem
- 混淆开启R8混淆
- proguard配置
-repackageclasses,此时输出的jar就大小写都存在了 - 将输出的jar引入工程中,使用插件化方案生成apk
- 运行时崩溃
ClassNotFound
其它重要信息 Other important information
replugin-host-lib/gradle Version: ALL rePlugin-plugin-lib/gradle Version: ALL
Android API Version: Android 手机型号&ROM(Phone model & ROM): ALL
Logcat上下文 Logcat context
无
jar重新打包后,class是存在的,只是在dex化后,dex里面class没有define。应该是Repackage后破坏了jar的混淆信息吧。
jar重新打包后,class是存在的,只是在dex化后,dex里面class没有define。应该是Repackage后破坏了jar的混淆信息吧。
repacket是指引入jar包就做好的事情,我怀疑是dex化时因为操作系统对大小写不敏感,A.class和a.class被合并成同一个class
Gradle插件transform的时候有个解压缩操作,在mac这种大小写不敏感的系统上就会导致覆盖,所以一些类就确实了,解决方案就是不解压,直接数据流的方式处理