大家如果遇到开启混淆后,奔溃的问题加上如下代码即可解决问题

#63 · open · 6 comments

View on GitHub ↗

ByteRax

奔溃代码: ` class TestActivity : BaseViewBindingActivity<TestBinding>() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) title = "提交成功" } } ` 未奔溃代码: ` class TestActivity : BaseViewBindingActivity<TestBinding>() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) title = "提交成功" getBinding().root.setBackgroundColor(Color.RED) } } ` 原因: 使用baseViewBind类的时候,如果未调用过getBinding()中的属性,在打release包时,编译器优化会优化掉泛型中的ViewBind类[因为在编译器看来该ViewBind中的类未被使用],导致找不到ViewBind类 解决办法: -keep class * implements androidx.viewbinding.ViewBinding {*;}

Comments

AIlll

AGP 8.0,默认开启android.enableR8.fullMode,在fullMode下,就算配置了混淆规则也不行 @DylanCaiCoding 有空帮忙看看

klxiaoniu

> AGP 8.0,默认开启android.enableR8.fullMode,在fullMode下,就算配置了混淆规则也不行 @DylanCaiCoding 有空帮忙看看 遇到同样问题,AGP 8.0.1,即使配置了规则依然报错, @DylanCaiCoding 麻烦大佬看看

ByteRax

> AGP 8.0,默认开启android.enableR8.fullMode,在fullMode下,就算配置了混淆规则也不行 @DylanCaiCoding 有空帮忙看看 @AIlll @klxiaoniu 试试这个,我亲测好使 -keep class * implements androidx.viewbinding.ViewBinding {*;} -keepclassmembers class * implements androidx.viewbinding.ViewBinding { public static ** bind(***); public static ** inflate(...); } -keep,allowobfuscation,allowshrinking class 你的包名. BaseBindingActivity

klxiaoniu

> > AGP 8.0,默认开启android.enableR8.fullMode,在fullMode下,就算配置了混淆规则也不行 @DylanCaiCoding 有空帮忙看看 > > @AIlll @klxiaoniu > > 试试这个,我亲测好使 > > -keep class * implements androidx.viewbinding.ViewBinding {*;} > > -keepclassmembers class * implements androidx.viewbinding.ViewBinding { public static ** bind(***); public static ** inflate(...); } > > -keep,allowobfuscation,allowshrinking class 你的包名. BaseBindingActivity 问题已解决,十分感谢!

ChawLoo

其实把R8的完整模式关了也无伤大雅

ByteRax

@ChawLoo 项目大了,对包体积有要求