adyen-android
adyen-android copied to clipboard
After integrating android SDK, app cannot run.
Describe the bug Hi,
My android app is using Java, after I integrated Adyen SDK into the app there is an error report and I can not run the app any more.
This is my build.gradle code:
api ('com.adyen.checkout:card:4.4.0') { exclude(group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8') }
This is the error message: You have duplicate classes with the same name : META-INF.versions.9.module-info please remove duplicate classes
Screenshots

Desktop (please complete the following information):
- OS: Android
Smartphone (please complete the following information):
- Device: Android phone
I believe it's not possible to exclude the Kotlin libs like that, but I'm not sure if that's whats causing the issue. Can you share more info on the error message? Which classes are duplicated?
"You have duplicate classes with the same name : META-INF.versions.9.module-info please remove duplicate classes "
This is all info I can get from the error message.
Actually, as there are lots of library integrated in my project, I think there are must some duplicate library between Adyen and the libraries that already exist, but I don't know which libraries/classes are duplicated.
I did more tests and found, after I excluded all of these libraries, my project can run successfully and I can use Adyen classes, but when I load these classes(like CardView) the project will crash.

You shouldn't have to do that manually. Gradle automatically detects dependencies that are common between all your libraries and only gets one of them. Have you tried using implementation "com.adyen.checkout:card:4.4.0" instead of api?
Also is this a release or a debug build? A quick search here seems to indicate this could be related to Proguard
YES, I tried using implementation "com.adyen.checkout:card:4.4.0" instead of api, it's the same result.
It's a debug build.
related to Proguard According to the first answerThere there is no such config on my Project.
task obfuscate(type: proguard.gradle.ProGuardTask) {
configuration files("proguard-project.txt")
libraryjars files("build/rt.jar", "build/jce.jar")
injars files("build/libs/desktop-${version}.jar"), filter: "!META-INF/versions/**/*.class"
outjars files("build/libs/obfuscated.jar")
}
But I found some META-INF configs

Hi, can you tell me which version o Java are you using in your project? Do you have something like this in your gradle?
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Hi,
I'm using Java 1.8.
Yes, I have this in my gradle.
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Maybe also this?
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
I'm trying to investigate this on my end but it's not something I'm very familiar with.
YES, there is this config.

Can you do a quick A/B test and maybe try to run the project with another version of the lib? Like 4.3.0 or 4.2.0?
The same result with v4.. and can not resolve com.adyen.checkout:card:3.8.3.
can you try to exclude(group: "com.adyen.checkout", module:"3ds2")
This one the project can be build successfully, but can not run.
implementation "com.adyen.checkout:card:4.4.0"
This one can not build successfully.
implementation "com.adyen.checkout:card:4.4.0" {
exclude(group: "com.adyen.checkout", module:"3ds2")
}
This is the error message.
Check build files to ensure at least one variant exists. at: com.android.tools.idea.gradle.project.sync.AndroidModule.deliverModels(AndroidModule.kt:135) com.android.tools.idea.gradle.project.sync.AndroidExtraModelProviderWorker.populateBuildModels(AndroidExtraModelProviderWorker.kt:80) com.android.tools.idea.gradle.project.sync.AndroidExtraModelProvider.populateBuildModels(AndroidExtraModelProvider.kt:52) org.jetbrains.plugins.gradle.model.ProjectImportAction.addBuildModels(ProjectImportAction.java:246) org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:116) org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:41) org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute(InternalBuildActionAdapter.java:64) org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.runAction(ClientProvidedPhasedActionRunner.java:120) org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.run(ClientProvidedPhasedActionRunner.java:110) org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner$ActionRunningListener.buildFinished(ClientProvidedPhasedActionRunner.java:104) sun.reflect.GeneratedMethodAccessor671.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) org.gradle.internal.event.DefaultListenerManager$ListenerDetails.dispatch(DefaultListenerManager.java:398) org.gradle.internal.event.DefaultListenerManager$ListenerDetails.dispatch(DefaultListenerManager.java:380) org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58) org.gradle.internal.event.DefaultListenerManager$EventBroadcast$ListenerDispatch.dispatch(DefaultListenerManager.java:368) org.gradle.internal.event.DefaultListenerManager$EventBroadcast$ListenerDispatch.dispatch(DefaultListenerManager.java:355) org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42) org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:245) org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:157) org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58) org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:346) org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:249) org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:141) org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37) org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) com.sun.proxy.$Proxy17.buildFinished(Unknown Source) org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:185) org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:127) org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:75) org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:67) org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:180) org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40) org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:67) org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56) org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:60) org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63) org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32) org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39) org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51) org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45) org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:409) org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:399) org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157) org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242) org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150) org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:94) org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36) org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45) org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50) org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47) org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:80) org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47) org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31) org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42) org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28) org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:87) org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:55) org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:60) org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:38) org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68) org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38) org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37) org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26) org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60) org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32) org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:56) org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42) org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48) org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32) org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68) org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78) org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75) org.gradle.util.Swapper.swap(Swapper.java:38) org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63) org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82) org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52) org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297) org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) java.lang.Thread.run(Thread.java:748)
Maybe then try to build with only implementation "com.adyen.checkout:3ds2:4.4.0", that would also tell me something.
implementation "com.adyen.checkout:3ds2:4.4.0"
Failed, this is the error message.
FAILURE: Build completed with 3 failures.
1: Task failed with an exception.
- What went wrong: Execution failed for task ':app:checkGooglePlayDebugDuplicateClasses'.
A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable Duplicate class org.bouncycastle.LICENSE found in modules jetified-bcprov-jdk15on-1.64 (org.bouncycastle:bcprov-jdk15on:1.64) and jetified-bcprov-jdk15to18-1.69 (org.bouncycastle:bcprov-jdk15to18:1.69) Duplicate class org.bouncycastle.asn1.ASN1ApplicationSpecific found in modules jetified-bcprov-jdk15on-1.64 (org.bouncycastle:bcprov-jdk15on:1.64) and jetified-bcprov-jdk15to18-1.69 (org.bouncycastle:bcprov-jdk15to18:1.69) Duplicate class org.bouncycastle.asn1.ASN1ApplicationSpecificParser found in modules jetified-bcprov-jdk15on-1.64 (org.bouncycastle:bcprov-jdk15on:1.64) and jetified-bcprov-jdk15to18-1.69 (org.bouncycastle:bcprov-jdk15to18:1.69) Duplicate class org.bouncycastle.asn1.ASN1BitString found in modules jetified-bcprov-jdk15on-1.64
(org.bouncycastle:bcprov-jdk15on:1.64) and jetified-bcprov-jdk15to18-1.69 (org.bouncycastle:bcprov-jdk15to18:1.69)
Duplicate class org.bouncycastle.x509.util.StreamParsingException found in modules jetified-bcprov-jdk15on-1.64 (org.bouncycastle:bcprov-jdk15on:1.64) and jetified-bcprov-jdk15to18-1.69 (org.bouncycastle:bcprov-jdk15to18:1.69)
Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>.
- Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. ==============================================================================
2: Task failed with an exception.
- What went wrong: Execution failed for task ':app:transformClassesWithComponentCodeForGooglePlayDebug'.
You have duplicate classes with the same name : META-INF.versions.9.module-info please remove duplicate classes
- Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. ==============================================================================
3: Task failed with an exception.
- What went wrong: Execution failed for task ':app:mergeGooglePlayDebugJavaResource'.
A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade More than one file was found with OS independent path 'org/bouncycastle/x509/CertPathReviewerMessages_de.properties'.
-
Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. ==============================================================================
-
Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 18s 360 actionable tasks: 8 executed, 1 from cache, 351 up-to-date
So apparently another one of your libs is adding jetified-bcprov-jdk15to18-1.69 as an internal dependency.
You can run ./gradlew app:dependencies and check the output to see if you can find any other bcprov is being added as an embedded jar or as a gradle dependency.
I'd say try to run your project like this to see if it works for now.
implementation "com.adyen.checkout:drop-in:4.4.0" {
exclude(group: "org.bouncycastle", module:"bcprov-jdk15to18")
}
Hi, I tried this, but doesn't work.
implementation "com.adyen.checkout:drop-in:4.4.0" {
exclude(group: "org.bouncycastle", module:"bcprov-jdk15to18")
}
And I found 'org.bouncycastle' this library is using 'bcprov-jdk15on', too, so I tried this. It's not working either.
implementation ("com.adyen.checkout:drop-in:4.4.0") {
exclude(group: "org.bouncycastle", module:"bcprov-jdk15on")
}
This is my project dependencies tree file, not sure what I did is correct? xx.txt
I see you already have bouncycastle directly as your dependency. Maybe it's a conflict because we use jdk15to18 and you use jdk15on.
Can you try this maybe? It should exclude it completely.
configurations.implementation {
exclude group: 'org.bouncycastle, module: 'bcprov-jdk15to18'
}
Also I think you sent the dependencie tree with just com.adyen.checkout:card instead of com.adyen.checkout:drop-in.
Dose this format correct?
Got the same error:
You have duplicate classes with the same name : META-INF.versions.9.module-info please remove duplicate classes

No, it should be outside of the depependencies bracket:
dependencies {
...
}
configurations.implementation {
exclude group: 'org.bouncycastle, module: 'bcprov-jdk15to18'
}
The same.

I even added this config to all of my model's build.gradle file, it's the same result.
Not sure if we can have a video call? I think it will be more efficiency.
Closing for inactivity, please reopen this issue if you are still experiencing problems.