androidx.databinding.DataBindingComponent is defined multiple times 错误问题

打包aar的库中引用了databinding的依赖,然后在主工程引入aar时,build release包会报错,debug时正常。

复制代码
Task :app:mergeDexRelease
AGPBI: {"kind":"error","text":"Type androidx.databinding.DataBindingComponent is defined multiple times: D:\\as\\work\\***\\build\\app\\intermediates\\project_dex_archive\\release\\dexBuilderRelease\\out\\androidx\\databinding\\DataBindingComponent.dex, D:\\as\\work\\***\\build\\app\\intermediates\\external_libs_dex\\release\\mergeExtDexRelease\\classes.dex","sources":[{"file":"D:\\as\\work\\***\\build\\app\\intermediates\\project_dex_archive\\release\\dexBuilderRelease\\out\\androidx\\databinding\\DataBindingComponent.dex"}],"tool":"D8"}
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Type androidx.databinding.DataBindingComponent is defined multiple times: D:\as\work\***\build\app\intermediates\project_dex_archive\release\dexBuilderRelease\out\androidx\databinding\DataBindingComponent.dex, D:\as\work\***\build\app\intermediates\external_libs_dex\release\mergeExtDexRelease\classes.dex
	at com.android.builder.dexing.D8DexArchiveMerger.getMergingExceptionToRethrow(D8DexArchiveMerger.java:230)
	at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:218)
	at com.android.build.gradle.internal.tasks.DexMergingWorkAction.merge(DexMergingTask.kt:935)
	at com.android.build.gradle.internal.tasks.DexMergingWorkAction.run(DexMergingTask.kt:884)
	at com.android.build.gradle.internal.profile.ProfileAwareWorkAction.execute(ProfileAwareWorkAction.kt:74)
	at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
	at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
	at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
	at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
	at org.gradle.internal.Factories$1.create(Factories.java:31)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: D:\as\work\***\build\app\intermediates\project_dex_archive\release\dexBuilderRelease\out\androidx\databinding\DataBindingComponent.dex
	at Version.fakeStackEntry(Version_8.13.6.java:0)
	at com.android.tools.r8.q0.a(R8_8.13.6_1c658b3b683138d620220f6965281391a8f410eddb02f3ff35a06caf88d6c59d:1)
	at com.android.tools.r8.internal.is0.a(R8_8.13.6_1c658b3b683138d620220f6965281391a8f410eddb02f3ff35a06caf88d6c59d:81)
	at com.android.tools.r8.internal.is0.a(R8_8.13.6_1c658b3b683138d620220f6965281391a8f410eddb02f3ff35a06caf88d6c59d:32)
	at com.android.tools.r8.internal.is0.a(R8_8.13.6_1c658b3b683138d620220f6965281391a8f410eddb02f3ff35a06caf88d6c59d:31)
	at com.android.tools.r8.internal.is0.b(R8_8.13.6_1c658b3b683138d620220f6965281391a8f410eddb02f3ff35a06caf88d6c59d:2)
	at com.android.tools.r8.D8.run(R8_8.13.6_1c658b3b683138d620220f6965281391a8f410eddb02f3ff35a06caf88d6c59d:11)
	at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:216)
	... 37 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: D:\as\work\***\build\app\intermediates\project_dex_archive\release\dexBuilderRelease\out\androidx\databinding\DataBindingComponent.dex

错误原因,

  1. 库工程引入了databinding的库,导致重复

  2. 库工程依赖的其他库,没有使用databinding的库,也需要开启databinding,然后再打包。
    3.解决方法如下,在依赖的库中,全部指定依赖版本,并用compileOnly 引用。然后打包成aar,放到主工程即可

    复制代码
     compileOnly 'androidx.databinding:databinding-runtime:8.13.0'
     compileOnly 'androidx.databinding:databinding-adapters:8.13.0'
     compileOnly 'androidx.databinding:databinding-ktx:8.13.0'
     compileOnly 'androidx.databinding:databinding-common:8.13.0'
相关推荐
星间都市山脉1 天前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx
李斯维3 天前
Jetpack 可观察数据容器 LiveData 的高级用法
android·android jetpack·androidx
我命由我1234511 天前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime
浪客川12 天前
安卓沉浸式写法
kotlin·androidx
我命由我1234515 天前
Android 开发问题:项目同时引入了两个包含相同类文件的库(AndroidX 库、旧版本支持库),导致了重复类错误
android·java·java-ee·android studio·android-studio·androidx·android runtime
vensli15 天前
AndroidX迁移总结
androidx
帅次2 个月前
WebView 并发初始化竞争风险分析
android·xml·flutter·kotlin·webview·androidx·dalvik
hnlgzb3 个月前
kotlin类 继承android.app.Activity 和androidx.activity.ComponentActivity 有什么区别?
android·kotlin·androidx
urkay-3 个月前
Android 当前Activity内显示的浮窗
android·java·iphone·androidx