L8+R8 API support
Bug:134732760
Change-Id: Iecd3d781d30fd93469f30a13773afd11fc6779ae
diff --git a/src/main/java/com/android/tools/r8/L8Command.java b/src/main/java/com/android/tools/r8/L8Command.java
index b760470..fecebda 100644
--- a/src/main/java/com/android/tools/r8/L8Command.java
+++ b/src/main/java/com/android/tools/r8/L8Command.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.Pair;
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.StringDiagnostic;
import java.util.ArrayList;
@@ -152,6 +153,8 @@
@Keep
public static class Builder extends BaseCompilerCommand.Builder<L8Command, Builder> {
+ private final List<Pair<List<String>, Origin>> proguardConfigs = new ArrayList<>();
+
private Builder() {
this(new DefaultL8DiagnosticsHandler());
}
@@ -161,8 +164,8 @@
}
public boolean isShrinking() {
- // TODO(b/134732760): Answers true if keep rules, even empty, are provided.
- return false;
+ // Answers true if keep rules, even empty, are provided.
+ return !proguardConfigs.isEmpty();
}
@Override
@@ -175,6 +178,12 @@
return CompilationMode.DEBUG;
}
+ /** Add proguard configuration. */
+ public Builder addProguardConfiguration(List<String> lines, Origin origin) {
+ proguardConfigs.add(new Pair<>(lines, origin));
+ return this;
+ }
+
@Override
void validate() {
Reporter reporter = getReporter();
@@ -214,17 +223,23 @@
DesugaredLibrary desugaredLibrary = new DesugaredLibrary();
if (isShrinking()) {
- // TODO(b/134732760): Support R8 is incomplete.
R8Command.Builder r8Builder =
R8Command.builder()
.addProgramResourceProvider(desugaredLibrary)
.setMinApiLevel(getMinApiLevel())
+ // We disable minification in Core libraries since it breaks class initialization
+ // of the core library at runtime.
+ // TODO(b/134732760) Enable minification in Core libraries.
+ .setDisableMinification(true)
.setMode(getMode())
.setProgramConsumer(getProgramConsumer());
for (ClassFileResourceProvider libraryResourceProvider :
inputs.getLibraryResourceProviders()) {
r8Builder.addLibraryResourceProvider(libraryResourceProvider);
}
+ for (Pair<List<String>, Origin> proguardConfig : proguardConfigs) {
+ r8Builder.addProguardConfiguration(proguardConfig.getFirst(), proguardConfig.getSecond());
+ }
r8Command = r8Builder.makeCommand();
} else {
D8Command.Builder d8Builder =
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
index cd510a5..e7b3f92 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/CoreLibDesugarTestBase.java
@@ -12,9 +12,11 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
+import java.util.Arrays;
import java.util.List;
public class CoreLibDesugarTestBase extends TestBase {
@@ -59,15 +61,19 @@
// We wrap exceptions in a RuntimeException to call this from a lambda.
try {
Path desugaredLib = temp.newFolder().toPath().resolve("desugar_jdk_libs_dex.zip");
- L8.run(
+ L8Command.Builder l8Builder =
L8Command.builder()
.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P))
.addProgramFiles(ToolHelper.getDesugarJDKLibs())
.addProgramFiles(additionalProgramFiles)
.addSpecialLibraryConfiguration("default")
.setMinApiLevel(apiLevel.getLevel())
- .setOutput(desugaredLib, OutputMode.DexIndexed)
- .build());
+ .setOutput(desugaredLib, OutputMode.DexIndexed);
+ if (shrink) {
+ l8Builder.addProguardConfiguration(
+ Arrays.asList(keepRules.split(System.lineSeparator())), Origin.unknown());
+ }
+ L8.run(l8Builder.build());
return desugaredLib;
} catch (Exception e) {
throw new RuntimeException(e);