DylanCaiCoding/ViewBindingKTX

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

tanranran opened this issue · 6 comments

奔溃代码:
`
class TestActivity : BaseViewBindingActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    title = "提交成功"
}

}
`
未奔溃代码:

`
class TestActivity : BaseViewBindingActivity() {

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 {*;}

AIlll commented

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

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

遇到同样问题,AGP 8.0.1,即使配置了规则依然报错, @DylanCaiCoding 麻烦大佬看看

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

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

问题已解决,十分感谢!