hegaojian / JetpackMvvm

:chicken::basketball:一个Jetpack结合MVVM的快速开发框架,基于MVVM模式集成谷歌官方推荐的JetPack组件库:LiveData、ViewModel、Lifecycle、Navigation组件 使用Kotlin语言,添加大量拓展函数,简化代码 加入Retrofit网络请求,协程,帮你简化各种操作,让你快速开发项目
https://github.com/hegaojian/JetpackMvvm
Apache License 2.0
3.1k stars 605 forks source link

开启混淆后,反射 inflate ViewBinding 时数组越界 #123

Closed suchen2 closed 1 year ago

suchen2 commented 1 year ago

在ViewBindUtil.kt文件中的 withGenericBindingClass 方法, 抛出异常: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

混淆后第三次的数组中只有一个元素,希望能帮忙提供一下解决方案,谢谢! return block.invoke(genericSuperclass.actualTypeArguments[1] as Class<VB>)

f5b0efef5924ca50cec78630a733403

这是正常运行的日志,打印的数组 actualTypeArguments 4c0136ebf97aa043e6637d7f210697d

这是混淆后崩溃的日志 34368f12a83334a43d466ae77c7fa54

suchen2 commented 1 year ago

给使用viewBinding和viewModel的module混淆文件里加上以下规则可解决

################ ViewBinding & DataBinding & ViewModel ###############
-keep class * extends androidx.lifecycle.ViewModel{*;}
-keep public interface androidx.viewbinding.ViewBinding
-keep class * implements androidx.viewbinding.ViewBinding{*;}
-keepclassmembers class * implements androidx.viewbinding.ViewBinding {
  public static * inflate(android.view.LayoutInflater);
  public static * inflate(android.view.LayoutInflater, android.view.ViewGroup, boolean);
  public static * bind(android.view.View);
}