Closed hqzxzwb closed 6 years ago
找到原因了 混淆后两个类的代码不相同了。
具体的情况是,这两个类里面调用了Exception.printStackTrace,而我们在app中开启了AS3.0的Java8支持,在这种支持模式下,printStackTrace会被替换为静态方法 com.google.devtools.build.android.desugar.runtime.ThrowableExtension.printStackTrace 而我在两次编译中没有保持mapping的一致,导致ThrowableExtension这个类在两次编译混淆后printStackTrace的函数名不相同,进而导致SharedIntentUtil和AMSInterceptHandler里面调用printStackTrace的代码不相同,从而出错。
建议 Tinker 在修改 proguard 配置时,将 com.google.devtools.build.android.desugar.runtime.ThrowableExtension 加入混淆白名单以解决这类问题。
@hqzxzwb 把上面这个类加入 proguard 就能解决问题吗?
@PrototypeZ 可以解决,但要从基础包开始就keep这个类。
-keep class com.google.devtools.build.android.desugar.runtime.ThrowableExtension{*;}
我把这句话加到 Proguard 里面,还是应用补丁失败,之前一直是好用的,升了 AS 3.0 才出错的 @hqzxzwb
@PrototypeZ 确认一下基础包也在AS3.0编译,并且keep了这个类吧。如果还是不行,你最好自己逆向看一下相应的类有什么改变,和我这边的问题不一定是一个case。
@hqzxzwb 已经定位问题了,和你不是一个问题,我的情况是我用的Bugly的服务,tinker 升级以后没有保持 buildscript 里面的依赖和 compile 的依赖都保持最新,全部升级到最新问题解决。还是谢谢你~
我1.9.14.10也遇到这问题了 我都没有开启混淆
异常类型:编译异常
手机型号:编译异常
手机系统版本:编译异常
tinker版本:1.9.2
gradle版本:plugin 3.0.1, gradle 4.1
是否使用热更新SDK: 无
系统:如:Mac
堆栈/日志:
代码里未修改以上提到的两个类,最终生成的类我没有逆向看过,我抽空看过以后再把结论发上来。