Remove support for package distribution in debug mode
R8 debug mode is setting minimal main dex which is not supported with
package distribution and package distribution doesn't make much sense in
release mode.
Change-Id: I858dec8048c5c493c1412f2b5ea6f8de496054ad
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 928b28f..aeaf0f8 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -34,6 +34,7 @@
private Optional<Boolean> treeShaking = Optional.empty();
private Optional<Boolean> minification = Optional.empty();
private boolean ignoreMissingClasses = false;
+ private Path packageDistributionFile = null;
private Builder() {
super(CompilationMode.RELEASE);
@@ -131,7 +132,7 @@
* Set a package distribution file resource.
*/
public Builder setPackageDistributionFile(Path path) {
- getAppBuilder().setPackageDistributionFile(path);
+ packageDistributionFile = path;
return self();
}
@@ -151,6 +152,10 @@
throw new CompilationException(
"Option --main-dex-list-output require --main-dex-rules and/or --main-dex-list");
}
+ if (getMode() == CompilationMode.DEBUG && packageDistributionFile != null) {
+ throw new CompilationException(
+ "Package distribution file is not supported in debug mode");
+ }
}
@Override
@@ -193,6 +198,10 @@
addLibraryFiles(configuration.getLibraryjars());
}
+ if (packageDistributionFile != null) {
+ getAppBuilder().setPackageDistributionFile(packageDistributionFile);
+ }
+
boolean useTreeShaking = treeShaking.orElse(configuration.isShrinking());
boolean useMinification = minification.orElse(configuration.isObfuscating());
diff --git a/src/test/java/com/android/tools/r8/dex/ExtraFileTest.java b/src/test/java/com/android/tools/r8/dex/ExtraFileTest.java
index d1e46f3..6114f61 100644
--- a/src/test/java/com/android/tools/r8/dex/ExtraFileTest.java
+++ b/src/test/java/com/android/tools/r8/dex/ExtraFileTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.dex;
import com.android.tools.r8.CompilationException;
+import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.shaking.ProguardRuleParserException;
@@ -18,6 +19,7 @@
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
public class ExtraFileTest {
@@ -32,8 +34,11 @@
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
@Test
- public void splitMemberRebindingTwoFiles()
+ public void splitMemberRebindingTwoFilesRelease()
throws IOException, ProguardRuleParserException, ExecutionException, CompilationException {
if (!ToolHelper.artSupported()) {
return;
@@ -46,6 +51,7 @@
R8Command command =
R8Command.builder()
.addProgramFiles(original)
+ .setMode(CompilationMode.RELEASE)
.setOutputPath(out)
.setMinApiLevel(Constants.ANDROID_L_API) // Allow native multidex.
.setProguardMapFile(proguardMap)
@@ -66,4 +72,24 @@
null,
null);
}
+
+ @Test
+ public void splitMemberRebindingTwoFilesDebug()
+ throws IOException, ProguardRuleParserException, ExecutionException, CompilationException {
+ thrown.expect(CompilationException.class);
+ Path out = temp.getRoot().toPath();
+ Path original = Paths.get(EXAMPLE_DIR, EXAMPLE_DEX);
+ Path packageMap = Paths.get(ToolHelper.EXAMPLES_DIR, EXAMPLE_PACKAGE_MAP);
+ Path proguardMap = Paths.get(ToolHelper.EXAMPLES_DIR, EXAMPLE_PROGUARD_MAP);
+ R8Command command =
+ R8Command.builder()
+ .addProgramFiles(original)
+ .setMode(CompilationMode.DEBUG)
+ .setOutputPath(out)
+ .setMinApiLevel(Constants.ANDROID_L_API) // Allow native multidex.
+ .setProguardMapFile(proguardMap)
+ .setPackageDistributionFile(packageMap)
+ .build();
+ ToolHelper.runR8(command);
+ }
}