NoSuchMethodException:com.x.y.z.j.h1.inflate[classandroid.vi



我有一个活动的视图绑定扩展。以下是实现:

inline fun <reified T : ViewBinding> Activity.viewBinding() = ActivityViewBindingDelegate(T::class.java)
class ActivityViewBindingDelegate<T : ViewBinding>(private val bindingClass: Class<T>) : ReadOnlyProperty<Activity, T> {
/**
* initiate variable for binding view
*/
private var binding: T? = null
@Suppress("UNCHECKED_CAST")
override fun getValue(thisRef: Activity, property: KProperty<*>): T {
binding?.let { return it }
/**
* inflate View class
*/
val inflateMethod = bindingClass.getMethod("inflate", LayoutInflater::class.java)
/**
* Bind layout
*/
val invokeLayout = inflateMethod.invoke(null, thisRef.layoutInflater) as T
/**
* Set the content view
*/
thisRef.setContentView(invokeLayout.root)
return invokeLayout.also { this.binding = it }
}
}

当我在debug变体中运行我的应用程序时,一切都很好。

当我在发布变体中运行我的应用程序时,在运行时活动启动时,我会得到以下异常:

Caused by: java.lang.NoSuchMethodException: com.x.y.z.j.h1.inflate [class android.view.LayoutInflater]

isMinifyEnabled=trueisShrinkResources=真正的

我必须混淆我的活动。如何解决这个问题?

添加proguard规则

-keepclassmembers class ** implements androidx.viewbinding.ViewBinding {
public static ** bind(***);
public static ** inflate(***);
}
bindingClass.getMethod("inflate", LayoutInflater::class.java) 

bindingClass.getMethod("bind", View::class.java)

使用R8模糊处理进行模糊处理。因此,我得到了这个例外。我们应该排除对膨胀和绑定方法的混淆。

因此,必须添加以下内容才能使用片段和活动的视图绑定扩展功能

-keep class com.sample.myapplication.databinding.* {
public static ** inflate( ** );
public static ** bind( ** );
}

它解决了我的问题。

-keep,allowoptimization class * implements androidx.viewbinding.ViewBinding {
public static *** bind(android.view.View);
public static *** inflate(...);
}

相关内容

  • 没有找到相关文章

最新更新