android - 代码混淆后数据绑定(bind)无法正常工作

标签 android proguard android-databinding androidx

我正在尝试使用我的 aar 库作为 Maven 依赖项。该库使用 AndroidX、数据绑定(bind)和代码混淆。

当“minifyEnabled = false”时,该库可以工作,但是当我打开代码混淆时,它会崩溃。

问题是,当我调用时,在 Activity.onCreate(savedInstanceState) 内:

binding = DataBindingUtils.setContentView(Activity,ResInt);
binding.getRoot(); // binding == null

我没有得到 ClassNotFoundException,而是得到 NullPointerException

我也尝试过使用

binding = MyActivityBinding.inflate(LayoutInflater,parent,attachtoparent);
setContentView(binding.getRoot());

但是绑定(bind)仍然为空。

首先,我通过将所有 android.support 库替换为相应的 AndroidX 包来实现迁移。

这是我的gradle.properties

android.useAndroidX=true
android.enableJetifier=true
android.enableR8=false
android.databinding.enableV2=false

和我的proguardrules.pro

-ignorewarnings

-keepattributes Signature

-keepattributes *Annotation*

-dontwarn sun.misc.**

-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keep class com.google.gson.** { *; }
-keep class com.loopj.android.** { *; }
-keep interface com.loopj.android.** { *; }

-keep class com.google.android.gms.maps.** { *; }
-keep interface com.google.android.gms.maps.** { *; }
-keepclassmembers class com.google.android.gms.maps.model.LatLng

没有 AndroidX,aar 库可以毫无问题地工作,也没有其他 ProGuard 规则。

是否需要执行一些额外步骤才能使 AndroidXm DataBinding 和代码混淆一起工作?

感谢您的建议。

最佳答案

尝试添加这些 Proguard 规则:

-keep class androidx.databinding.** { *; }
-keep class * extends androidx.databinding.DataBinderMapper { *; }

关于android - 代码混淆后数据绑定(bind)无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58501511/

相关文章:

android - 如何查找天气预报城市ID?

android - 什么时候在 Flutter 中使用 setState?

android - Room DB升级需要编写完整的插入查询

android - ClassNotFoundException:在路径上找不到类:DexPathList

java - 无法在 Android Studio 中导入数据绑定(bind)类

java - 无法使用数据绑定(bind)在运行时获取 View 的宽度

Android - 具有首选项 Activity 的数据绑定(bind)

android - 使用 ant 运行 Instrumentation 测试时出现 NoClassDefFoundError

Android Room Persistence Library Proguard 配置

java - 运行签名的android应用程序,发生NPE,可能是由于proguard?