我正在尝试将3年的旧项目迁移到AndroidX。该项目有3个模块。
应用是主要模块。该项目在运行时生成 sdk 和 apis 模块的AAR文件。而 app 使用 sdk 和 api
我为迁移所做的更改是:
应用启动时,会从应用模块启动活动,该活动运行良好。紧接着,它从 sdk 模块启动活动。但是在这里,应用程序在DataBindingUtil.setContentView崩溃。所有3个模块均启用了数据绑定。下面是堆栈跟踪。
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/databinding/library/baseAdapters/DataBinderMapperImpl;
at com.xyz.sdk.DataBinderMapperImpl.collectDependencies(DataBinderMapperImpl.java:274)
at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:58)
at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:60)
at androidx.databinding.DataBinderMapperImpl.<init>(DataBinderMapperImpl.java:5)
at androidx.databinding.DataBindingUtil.<clinit>(DataBindingUtil.java:32)
at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
at com.xyz.sdk.landing.LandingPageActivity.onCreate(LandingPageActivity.java:51)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.databinding.library.baseAdapters.DataBinderMapperImpl" on path: DexPathList[[zip file "/data/app/com.example.admin.myapplication-fYwVmwZfRLEOIXuh0dvhUg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.admin.myapplication-fYwVmwZfRLEOIXuh0dvhUg==/lib/x86, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.xyz.sdk.DataBinderMapperImpl.collectDependencies(DataBinderMapperImpl.java:274)
at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:58)
at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:60)
at androidx.databinding.DataBinderMapperImpl.<init>(DataBinderMapperImpl.java:5)
at androidx.databinding.DataBindingUtil.<clinit>(DataBindingUtil.java:32)
at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
at com.xyz.sdk.landing.LandingPageActivity.onCreate(LandingPageActivity.java:51)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
答案 0 :(得分:2)
我有同样的错误。如果您在多模块项目中工作,则需要为databinding
模块(取决于使用它的库)启用app
。
因此,我的解决方法是直接使用databinding
将其添加到模块中,也将其添加到app
模块中。
buildFeatures {
dataBinding true
}
答案 1 :(得分:0)
除了现有的答案。我必须在proguard中添加以下行。
-keep class androidx.databinding.** { *; }
-keep class * extends androidx.databinding.DataBinderMapper { *; }