google / bundletool

Bundletool is a command-line tool to manipulate Android App Bundles
https://g.co/androidappbundle
Apache License 2.0
3.52k stars 385 forks source link

Fail to generate universal apks from aab on gradle 5 #113

Closed fadeltd closed 5 years ago

fadeltd commented 5 years ago

Describe the bug I tried to build generate universal apks from aab file after upgrading gradle version 5.4.1, I can still generate apks mode universal when I use gradle version 4.10.3

Bundletool version(s) affected Version: 0.10.2

Stacktrace

Error: Program type already present: $r8$java8methods$utility$Integer$hashCode$II
[BT:0.10.2] Error: Dex merging failed.
com.android.tools.build.bundletool.model.exceptions.CommandExecutionException: Dex merging failed.
    at com.android.tools.build.bundletool.mergers.D8DexMerger.translateD8Exception(D8DexMerger.java:98)
    at com.android.tools.build.bundletool.mergers.D8DexMerger.merge(D8DexMerger.java:77)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeDexFiles(ModuleSplitsToShardMerger.java:334)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.lambda$mergeDexFilesAndCache$2(ModuleSplitsToShardMerger.java:302)
    at java.util.HashMap.computeIfAbsent(HashMap.java:1127)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeDexFilesAndCache(ModuleSplitsToShardMerger.java:300)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeSingleShard(ModuleSplitsToShardMerger.java:194)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.merge(ModuleSplitsToShardMerger.java:104)
    at com.android.tools.build.bundletool.splitters.BundleSharder.shardBundle(BundleSharder.java:103)
    at com.android.tools.build.bundletool.splitters.ShardedApksGenerator.generateSplits(ShardedApksGenerator.java:70)
    at com.android.tools.build.bundletool.commands.BuildApksManager.executeWithZip(BuildApksManager.java:179)
    at com.android.tools.build.bundletool.commands.BuildApksManager.execute(BuildApksManager.java:110)
    at com.android.tools.build.bundletool.commands.BuildApksCommand.execute(BuildApksCommand.java:524)
    at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:74)
    at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:46)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
    at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:76)
    at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45)
    at com.android.tools.r8.D8.run(D8.java:67)
    at com.android.tools.build.bundletool.mergers.D8DexMerger.merge(D8DexMerger.java:70)
    ... 13 more
Caused by: com.android.tools.r8.utils.AbortException
    at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:77)
    at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:58)
    at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:67)
    ... 16 more

To Reproduce ./bundletool build-apks --bundle=app/build/outputs/bundle/debug/app.aab --output=app/build/outputs/bundle/debug/app.apks --mode=universal

Expected behavior Universal APKS generated from aab file

Environment: OS: macOS 10.14.5

Additional context I found the same error android studio blog and goole issue tracker but different stacktrace

firoze commented 5 years ago

I'm running into this issue as well, although my stacktrace is slightly different from yours.

Error: Program type already present: $r8$java8methods$utility$Float$hashCode$IF
[BT:0.10.2] Error: Dex merging failed.
com.android.tools.build.bundletool.model.exceptions.CommandExecutionException: Dex merging failed.
    at com.android.tools.build.bundletool.mergers.D8DexMerger.translateD8Exception(D8DexMerger.java:98)
    at com.android.tools.build.bundletool.mergers.D8DexMerger.merge(D8DexMerger.java:77)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeDexFiles(ModuleSplitsToShardMerger.java:334)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.lambda$mergeDexFilesAndCache$2(ModuleSplitsToShardMerger.java:302)
    at java.util.HashMap.computeIfAbsent(HashMap.java:1127)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeDexFilesAndCache(ModuleSplitsToShardMerger.java:300)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeSingleShard(ModuleSplitsToShardMerger.java:194)
    at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.merge(ModuleSplitsToShardMerger.java:104)
    at com.android.tools.build.bundletool.splitters.BundleSharder.shardBundle(BundleSharder.java:103)
    at com.android.tools.build.bundletool.splitters.ShardedApksGenerator.generateSplits(ShardedApksGenerator.java:70)
    at com.android.tools.build.bundletool.commands.BuildApksManager.executeWithZip(BuildApksManager.java:179)
    at com.android.tools.build.bundletool.commands.BuildApksManager.execute(BuildApksManager.java:110)
    at com.android.tools.build.bundletool.commands.BuildApksCommand.execute(BuildApksCommand.java:524)
    at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:74)
    at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:46)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
    at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:76)
    at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45)
    at com.android.tools.r8.D8.run(D8.java:67)
    at com.android.tools.build.bundletool.mergers.D8DexMerger.merge(D8DexMerger.java:70)
    ... 13 more
Caused by: com.android.tools.r8.utils.AbortException
    at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:77)
    at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:58)
    at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:67)
    ... 16 more

It has been some time since your r8 PR has been opened. I'm hoping an update can be out soon.

fadeltd commented 5 years ago

I'm running into this issue as well, although my stacktrace is slightly different from yours.

Error: Program type already present: $r8$java8methods$utility$Float$hashCode$IF
[BT:0.10.2] Error: Dex merging failed.
com.android.tools.build.bundletool.model.exceptions.CommandExecutionException: Dex merging failed.
  at com.android.tools.build.bundletool.mergers.D8DexMerger.translateD8Exception(D8DexMerger.java:98)
  at com.android.tools.build.bundletool.mergers.D8DexMerger.merge(D8DexMerger.java:77)
  at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeDexFiles(ModuleSplitsToShardMerger.java:334)
  at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.lambda$mergeDexFilesAndCache$2(ModuleSplitsToShardMerger.java:302)
  at java.util.HashMap.computeIfAbsent(HashMap.java:1127)
  at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeDexFilesAndCache(ModuleSplitsToShardMerger.java:300)
  at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.mergeSingleShard(ModuleSplitsToShardMerger.java:194)
  at com.android.tools.build.bundletool.mergers.ModuleSplitsToShardMerger.merge(ModuleSplitsToShardMerger.java:104)
  at com.android.tools.build.bundletool.splitters.BundleSharder.shardBundle(BundleSharder.java:103)
  at com.android.tools.build.bundletool.splitters.ShardedApksGenerator.generateSplits(ShardedApksGenerator.java:70)
  at com.android.tools.build.bundletool.commands.BuildApksManager.executeWithZip(BuildApksManager.java:179)
  at com.android.tools.build.bundletool.commands.BuildApksManager.execute(BuildApksManager.java:110)
  at com.android.tools.build.bundletool.commands.BuildApksCommand.execute(BuildApksCommand.java:524)
  at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:74)
  at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:46)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
  at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:76)
  at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45)
  at com.android.tools.r8.D8.run(D8.java:67)
  at com.android.tools.build.bundletool.mergers.D8DexMerger.merge(D8DexMerger.java:70)
  ... 13 more
Caused by: com.android.tools.r8.utils.AbortException
  at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:77)
  at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:58)
  at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:67)
  ... 16 more

It has been some time since your r8 PR has been opened. I'm hoping an update can be out soon.

maybe you can try the executableJar from my PR bundletool-all.jar.zip

Currently, updating the r8 in bundletool is the only workaround I found

firoze commented 5 years ago

maybe you can try the executableJar from my PR bundletool-all.jar.zip

Currently, updating the r8 in bundletool is the only workaround I found

Thank you very much! I was able to build a universal .apks file from your PR's executableJar. I've at least been temporarily unblocked for now. Hoping your PR is merged soon and a release is out.

plecesne commented 5 years ago

We've updated the version of R8 in 0.10.3. Could you give it a try?

fadeltd commented 5 years ago

We've updated the version of R8 in 0.10.3. Could you give it a try?

it works

rallat commented 5 years ago

We had the same issue #113 with bundletool 0.10.2 but the 3 days ago released 0.10.3 fixed it for us. Thanks!