Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conflicts in ShowkaseMetadata from multiple modules when building the app #198

Closed
davidvavra opened this issue Dec 7, 2021 · 7 comments
Closed
Labels
bug Something isn't working

Comments

@davidvavra
Copy link

Hi, sorry for so many issues, but using the library in large mature app comes with challenges :)

I have two feature modules - it works when I enable Showkase for either of them. But if I enable it for both, build fails with this error:

> Task :app:mergeLibDexDevDebug FAILED
AGPBI: {"kind":"error","text":"Type com.airbnb.android.showkase.LiveLiterals$ShowkaseMetadataViewKt is defined multiple times: C:\\dev\\jll\\jill-android-mobile-application\\features\\hid\\build\\.transforms\\b58570d70135c2a0ba4a0feb663d654d\\transformed\\classes\\classes.dex, C:\\dev\\jll\\jill-android-mobile-application\\features\\qr-access\\build\\.transforms\\1dfab4c205eebe8e2cc739aac5937709\\transformed\\classes\\classes.dex","sources":[{"file":"C:\\dev\\jll\\jill-android-mobile-application\\features\\hid\\build\\.transforms\\b58570d70135c2a0ba4a0feb663d654d\\transformed\\classes\\classes.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 com.airbnb.android.showkase.LiveLiterals$ShowkaseMetadataViewKt is defined multiple times: C:\dev\jll\jill-android-mobile-application\features\hid\build\.transforms\b58570d70135c2a0ba4a0feb663d654d\transformed\classes\classes.dex, C:\dev\jll\jill-android-mobile-application\features\qr-access\build\.transforms\1dfab4c205eebe8e2cc739aac5937709\transformed\classes\classes.dex
	at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:151)
	at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:138)
	at com.android.build.gradle.internal.tasks.DexMergingWorkAction.merge(DexMergingTask.kt:863)
	at com.android.build.gradle.internal.tasks.DexMergingWorkAction.run(DexMergingTask.kt:809)
	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:97)
	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:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	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$2(DefaultWorkerExecutor.java:206)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:214)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	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.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: C:\dev\jll\jill-android-mobile-application\features\hid\build\.transforms\b58570d70135c2a0ba4a0feb663d654d\transformed\classes\classes.dex
	at Version.fakeStackEntry(Version_3.0.69.java:0)
	at com.android.tools.r8.utils.w.a(SourceFile:68)
	at com.android.tools.r8.utils.w.a(SourceFile:28)
	at com.android.tools.r8.utils.w.a(SourceFile:27)
	at com.android.tools.r8.utils.w.b(SourceFile:3)
	at com.android.tools.r8.D8.run(D8.java:11)
	at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:136)
	... 35 more
Caused by: com.android.tools.r8.internal.b: Type com.airbnb.android.showkase.LiveLiterals$ShowkaseMetadataViewKt is defined multiple times: C:\dev\jll\jill-android-mobile-application\features\hid\build\.transforms\b58570d70135c2a0ba4a0feb663d654d\transformed\classes\classes.dex, C:\dev\jll\jill-android-mobile-application\features\qr-access\build\.transforms\1dfab4c205eebe8e2cc739aac5937709\transformed\classes\classes.dex
	at com.android.tools.r8.internal.RA.a(SourceFile:14)

I observe that the problem is with generated file ShowkaseMetadata*. It takes top-level package and names the file accordingly. This is our package structure:
com.jll.jet.qraccess.view -> ShowkaseMetadataView
com.jll.jet.hid.view -> ShowkaseMetadataView

And that creates the conflict. If the package ends with something else (like com.jll.jet.hid.view2), it creates a different file (like ShowkaseMetadataView2) and there is no issue.

@vinaygaba
Copy link
Collaborator

Thanks for the report. I will need to repro this on my end and will publish a fix as this is not intended behavior.

@davidvavra
Copy link
Author

@vinaygaba I would say this issue has the highest priority for our usage. It's preventing using the library in many modules. I don't want to rename our packages only because of Showkase.

@vinaygaba
Copy link
Collaborator

I think I should be able to fix this relatively quickly. Will try reproing it and publish a fix soon. I think I do understand where the problem lies 🤔

@davidvavra
Copy link
Author

Great, thanks!

@davidvavra
Copy link
Author

@vinaygaba Could you please do a release with this change?

@vinaygaba
Copy link
Collaborator

@davidvavra
Copy link
Author

Great, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants