Adobe-Runtime-Support icon indicating copy to clipboard operation
Adobe-Runtime-Support copied to clipboard

Cannot build Android AAB package with native extension with the same id

Open itlancer opened this issue 1 year ago • 3 comments

Problem Description

Cannot build Android AAB application with native extension that has the same id. If application id equal with native extension id that it uses - you will get packaging error.

It has been tested with multiple AIR versions, even with latest AIR 50.0.0.1 with different applications ids with different native extensions. Same problem in all cases if native extension has the same id as application. There is no such issue with APK packaging.

Related issue (not the same): https://github.com/airsdk/Adobe-Runtime-Support/issues/1188

Steps to Reproduce

Try to package AIR application as Android AAB with application id that equal native extension id that is uses. Application example with sources, native extension sample and packaging commands attached. android_aab_native_extension_id_bug.zip

Packaging command: adt -package -target aab -storetype pkcs12 -keystore cert.p12 -storepass pass -keypass pass android_aab_native_extension_id_bug.apk android_aab_native_extension_id_bug-app.xml -extdir libs android_aab_native_extension_id_bug.swf Application ID and native extension ID: com.test.ane

Actual Result: Packaging error:

unexpected failure: Unable to run java: com.adobe.air.ADTException: gradle tool failed: Warning: This version only understands SDK XML versions up to 2 but an SDK XML file of version 3 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.
ERROR:C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex: D8: Type com.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\classes.dex
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.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\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:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        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:61)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex
        at Version.fakeStackEntry(Version_3.0.64.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)
        ... 33 more
Caused by: com.android.tools.r8.internal.b: Type com.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\classes.dex
        at com.android.tools.r8.internal.RA.a(SourceFile:14)
        at com.android.tools.r8.internal.RA.a(SourceFile:22)
        at com.android.tools.r8.internal.Cw.b(SourceFile:6)
        at com.android.tools.r8.internal.Cw.a(SourceFile:23)
        at com.android.tools.r8.internal.Cw.a(SourceFile:10)
        at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2048)
        at com.android.tools.r8.internal.Cw.a(SourceFile:6)
        at com.android.tools.r8.graph.I0$c.f(SourceFile:3)
        at com.android.tools.r8.dex.a.a(SourceFile:94)
        at com.android.tools.r8.dex.a.a(SourceFile:23)
        at com.android.tools.r8.D8.a(D8.java:21)
        at com.android.tools.r8.D8.d(D8.java:11)
        at com.android.tools.r8.D8.b(D8.java:1)
        at com.android.tools.r8.utils.w.a(SourceFile:24)
        ... 36 more


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDexRelease'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.DexMergingTaskDelegate
   > There was a failure while executing work items
      > A failure occurred while executing com.android.build.gradle.internal.tasks.DexMergingWorkAction
         > 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.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\classes.dex

* 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

BUILD FAILED in 15s

java.io.IOException: Unable to run java: com.adobe.air.ADTException: gradle tool failed: Warning: This version only understands SDK XML versions up to 2 but an SDK XML file of version 3 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.
ERROR:C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex: D8: Type com.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\classes.dex
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.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\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:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        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:61)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex
        at Version.fakeStackEntry(Version_3.0.64.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)
        ... 33 more
Caused by: com.android.tools.r8.internal.b: Type com.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\classes.dex
        at com.android.tools.r8.internal.RA.a(SourceFile:14)
        at com.android.tools.r8.internal.RA.a(SourceFile:22)
        at com.android.tools.r8.internal.Cw.b(SourceFile:6)
        at com.android.tools.r8.internal.Cw.a(SourceFile:23)
        at com.android.tools.r8.internal.Cw.a(SourceFile:10)
        at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2048)
        at com.android.tools.r8.internal.Cw.a(SourceFile:6)
        at com.android.tools.r8.graph.I0$c.f(SourceFile:3)
        at com.android.tools.r8.dex.a.a(SourceFile:94)
        at com.android.tools.r8.dex.a.a(SourceFile:23)
        at com.android.tools.r8.D8.a(D8.java:21)
        at com.android.tools.r8.D8.d(D8.java:11)
        at com.android.tools.r8.D8.b(D8.java:1)
        at com.android.tools.r8.utils.w.a(SourceFile:24)
        ... 36 more


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDexRelease'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.DexMergingTaskDelegate
   > There was a failure while executing work items
      > A failure occurred while executing com.android.build.gradle.internal.tasks.DexMergingWorkAction
         > 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.test.ane.BuildConfig is defined multiple times: C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\project_dex_archive\release\out\com\test\ane\BuildConfig.dex, C:\Users\username\AppData\Local\Temp\34746714-fe1d-446a-b323-0d3ec1f1322f\app\build\intermediates\external_libs_dex\release\mergeExtDexRelease\classes.dex

* 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

BUILD FAILED in 15s

        at com.adobe.air.apk.AABOutputStream.buildGradle(AABOutputStream.java)
        at com.adobe.air.apk.AABPackager.renameOutput(AABPackager.java)
        at com.adobe.air.ApplicationPackager.createPackage(ApplicationPackager.java)
        at com.adobe.air.apk.AABPackager.createPackage(AABPackager.java)
        at com.adobe.air.ADT.parseArgsAndGo(ADT.java)
        at com.adobe.air.ADT.run(ADT.java)
        at com.adobe.air.ADT.main(ADT.java)

Expected Result: AIR application will be packaged without errors.

Known Workarounds

Change application ID or native extension ID.

itlancer avatar Oct 07 '22 20:10 itlancer

I'd suggest making sure your application id and extension package name don't overlap. They are supposed to be unique.

marchbold avatar Oct 09 '22 00:10 marchbold

@marchbold, I already use different IDs as described in workaround. I have opened this issue cause error log not obvious about real issue and may be other developers stuck with that. And it works fine with APK. So I think there should be some comment from @ajwfrost. May be some better adt error description should be in such cases..

itlancer avatar Oct 09 '22 06:10 itlancer

Okay sure, I'd expect the error would be fairly obvious to an extension developer though and one of the reasons to ensure you are using unique package names for your extensions.

marchbold avatar Oct 09 '22 07:10 marchbold