android - 代码混淆后数据绑定无法正常工作
问题描述
我正在尝试将我的 aar 库用作 Maven 依赖项。该库使用 AndroidX、数据绑定和代码混淆。
该库在 `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());
但binding
仍然为空。
首先,我通过将所有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 { *; }
推荐阅读
- java - 为什么当我旋转屏幕时我的 webview 片段变为空?安卓 - 爪哇
- node.js - 覆盖权限不改变 discord.js v12
- flutter - Revenuecat、Flutter - PurchasePackage 不起作用,但没有例外
- xaml - 我需要使用带有输入的ffimageloading:AdvancedEntry
- r - 使用 for 循环在 R 中创建多个具有不同名称的对象时出错
- ios - 如何在不覆盖以前数据的情况下使用 rxSwift 压缩、合并或连接?
- flutter - 该表达式不计算为函数,所以它不能被调用?
- javascript - 函数接收一个字符数组并返回一个包含字符 az、AZ 和 0-9 的字符串
- jsf - 为什么页面第一次加载时没有连接到数据库?
- java - 如何将单个任务变成并行线程