diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java index 61c73e10cb8ee2..77f5f99171f465 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java @@ -102,7 +102,8 @@ public AndroidBinary.DexPostprocessingOutput postprocessClassesDexZip( NestedSetBuilder filesBuilder, Artifact classesDexZip, ProguardOutput proguardOutput, - Artifact proguardMapOutput) + Artifact proguardMapOutput, + Artifact mainDexList) throws InterruptedException { return AndroidBinary.DexPostprocessingOutput.create(classesDexZip, proguardOutput.getMapping()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 6997f7c42e9616..7b7202867d0202 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -599,7 +599,8 @@ public static RuleConfiguredTargetBuilder createAndroidBinary( filesBuilder, dexingOutput.classesDexZip, proguardOutput, - postProcessingOutputMap); + postProcessingOutputMap, + dexingOutput.mainDexList); // Compute the final DEX files by appending Java 8 legacy .dex if used. Artifact finalClassesDex; @@ -1241,12 +1242,19 @@ static final class DexingOutput { private final Artifact classesDexZip; final Artifact javaResourceJar; final ImmutableList shardDexZips; + // This is not technically and output of dexing, but the processed main dex list that was used + // in dexing. + final Artifact mainDexList; private DexingOutput( - Artifact classesDexZip, Artifact javaResourceJar, ImmutableList shardDexZips) { + Artifact classesDexZip, + Artifact javaResourceJar, + ImmutableList shardDexZips, + Artifact mainDexList) { this.classesDexZip = classesDexZip; this.javaResourceJar = javaResourceJar; this.shardDexZips = Preconditions.checkNotNull(shardDexZips); + this.mainDexList = mainDexList; } } @@ -1398,7 +1406,7 @@ private static DexingOutput dex( // for other multidex modes. javaResourceJar = javaResourceSourceJar; } - return new DexingOutput(classesDex, javaResourceJar, shardDexes); + return new DexingOutput(classesDex, javaResourceJar, shardDexes, mainDexList); } else { if (usesDexArchives) { createIncrementalDexingActions( @@ -1430,7 +1438,8 @@ private static DexingOutput dex( mainDexList); createCleanDexZipAction(ruleContext, classesDexIntermediate, classesDex); } - return new DexingOutput(classesDex, javaResourceSourceJar, ImmutableList.of(classesDex)); + return new DexingOutput( + classesDex, javaResourceSourceJar, ImmutableList.of(classesDex), mainDexList); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java index e02b607dfd66ae..23ce7cf208dd6d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java @@ -123,7 +123,8 @@ AndroidBinary.DexPostprocessingOutput postprocessClassesDexZip( NestedSetBuilder filesBuilder, Artifact classesDexZip, ProguardOutput proguardOutput, - Artifact proguardMapOutput) + Artifact proguardMapOutput, + Artifact mainDexList) throws InterruptedException; default AndroidDataContext makeContextForNative(RuleContext ruleContext) {