升级AGP至8.3.0后R8混淆致重写方法变final的问题咨询
AGP 8.3.0升级后R8将重写方法转为final的解决办法
升级到AGP 8.3.0(搭配Gradle 8.4、Java 17)后,R8默认开启了一项性能优化:将非库类中无需被重写的方法标记为final,但这会破坏依赖方法重写的业务逻辑,导致应用出现异常行为。
针对大量方法被标记为final的场景,无需逐个使用-keep,可以通过以下ProGuard/R8规则直接阻止该转换:
全局禁止非库类方法被标记为final:
-dontmarknonlibraryclassesasfinal这个规则会让R8跳过对应用代码中所有类的方法的final标记,覆盖所有重写方法的场景,适合大量函数受影响的情况。
若需要精细控制(比如仅针对特定包),可以使用:
-keepclassmembers class com.your.app.package.** { !final <methods>; }把
com.your.app.package.**替换为你需要保留非final方法的包路径即可。
将上述规则添加到你的proguard-rules.pro文件中,重新构建混淆后的包即可解决问题。
内容的提问来源于stack exchange,提问作者HydTech
相关产品推荐
相关产品推荐

