Merge "Remove and hide non-API procedures on R8."
diff --git a/.gitignore b/.gitignore
index 0661690..b66a429 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,6 +20,8 @@
tools/*/art-7.0.0.tar.gz
tools/*/dalvik
tools/*/dalvik.tar.gz
+tools/*/dalvik-4.0.4
+tools/*/dalvik-4.0.4.tar.gz
tools/*/dx
tools/*/dx.tar.gz
third_party/android_jar/lib
diff --git a/build.gradle b/build.gradle
index 4e7562c..2d98276 100644
--- a/build.gradle
+++ b/build.gradle
@@ -271,6 +271,8 @@
"android_jar/lib-v15",
"android_jar/lib-v19",
"android_jar/lib-v21",
+ "android_jar/lib-v22",
+ "android_jar/lib-v23",
"android_jar/lib-v24",
"android_jar/lib-v25",
"android_jar/lib-v26",
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 0424e2a..f65b4eb 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -191,20 +191,6 @@
}
/**
- * Add and/or chain proguard configuration consumer(s) for testing.
- */
- public Builder addProguardConfigurationConsumer(Consumer<ProguardConfiguration.Builder> c) {
- Consumer<ProguardConfiguration.Builder> oldConsumer = proguardConfigurationConsumer;
- proguardConfigurationConsumer = builder -> {
- if (oldConsumer != null) {
- oldConsumer.accept(builder);
- }
- c.accept(builder);
- };
- return self();
- }
-
- /**
* Set an output destination to which proguard-map content should be written.
*
* <p>This is a short-hand for setting a {@link StringConsumer.FileConsumer} using {@link
@@ -336,6 +322,18 @@
return command;
}
+
+ // Internal for-testing method to add post-processors of the proguard configuration.
+ void addProguardConfigurationConsumerForTesting(Consumer<ProguardConfiguration.Builder> c) {
+ Consumer<ProguardConfiguration.Builder> oldConsumer = proguardConfigurationConsumer;
+ proguardConfigurationConsumer =
+ builder -> {
+ if (oldConsumer != null) {
+ oldConsumer.accept(builder);
+ }
+ c.accept(builder);
+ };
+ }
}
// Internal state to verify parsing properties not enforced by the builder.
diff --git a/src/main/java/com/android/tools/r8/dex/Constants.java b/src/main/java/com/android/tools/r8/dex/Constants.java
index 03f2ad5..77a82df 100644
--- a/src/main/java/com/android/tools/r8/dex/Constants.java
+++ b/src/main/java/com/android/tools/r8/dex/Constants.java
@@ -15,8 +15,8 @@
public static final int MIN_VDEX_VERSION = 10;
public static final int MAX_VDEX_VERSION = 11;
- // We apply Java 7 class file constraints on DEX files.
- public static final int CORRESPONDING_CLASS_FILE_VERSION = 51;
+ // We apply Java 6 class file constraints on DEX files.
+ public static final int CORRESPONDING_CLASS_FILE_VERSION = 50;
public static final int DEX_MAGIC_SIZE = 8;
diff --git a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java
index 363b80c..4e080b7 100644
--- a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java
+++ b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8ApiUsageSample.java
@@ -97,18 +97,19 @@
throw new RuntimeException("Must supply main-dex-list inputs");
}
- useProgramFileBuilder(CompilationMode.DEBUG, minApiLevel, libraries, classpath, inputs);
- useProgramFileBuilder(CompilationMode.RELEASE, minApiLevel, libraries, classpath, inputs);
- useProgramDataBuilder(minApiLevel, libraries, classpath, inputs);
- useProgramProvider(minApiLevel, libraries, classpath, inputs);
+ useProgramFileList(CompilationMode.DEBUG, minApiLevel, libraries, classpath, inputs);
+ useProgramFileList(CompilationMode.RELEASE, minApiLevel, libraries, classpath, inputs);
+ useProgramData(minApiLevel, libraries, classpath, inputs);
+ useProgramResourceProvider(minApiLevel, libraries, classpath, inputs);
useLibraryAndClasspathProvider(minApiLevel, libraries, classpath, inputs);
useMainDexListFiles(minApiLevel, libraries, classpath, inputs, mainDexList);
useMainDexClasses(minApiLevel, libraries, classpath, inputs, mainDexList);
+ useVArgVariants(minApiLevel, libraries, classpath, inputs, mainDexList);
incrementalCompileAndMerge(minApiLevel, libraries, classpath, inputs);
}
// Check API support for compiling Java class-files from the file system.
- private static void useProgramFileBuilder(
+ private static void useProgramFileList(
CompilationMode mode,
int minApiLevel,
Collection<Path> libraries,
@@ -130,7 +131,7 @@
}
// Check API support for compiling Java class-files from byte content.
- private static void useProgramDataBuilder(
+ private static void useProgramData(
int minApiLevel,
Collection<Path> libraries,
Collection<Path> classpath,
@@ -145,6 +146,11 @@
for (ClassFileContent classfile : readClassFiles(inputs)) {
builder.addClassProgramData(classfile.data, classfile.origin);
}
+ for (Path input : inputs) {
+ if (isDexFile(input)) {
+ builder.addDexProgramData(Files.readAllBytes(input), new PathOrigin(input));
+ }
+ }
D8.run(builder.build());
} catch (CompilationFailedException e) {
throw new RuntimeException("Unexpected compilation exceptions", e);
@@ -154,7 +160,7 @@
}
// Check API support for compiling Java class-files from a program provider abstraction.
- private static void useProgramProvider(
+ private static void useProgramResourceProvider(
int minApiLevel,
Collection<Path> libraries,
Collection<Path> classpath,
@@ -171,7 +177,7 @@
builder.addProgramResourceProvider(
ArchiveProgramResourceProvider.fromArchive(
input, ArchiveProgramResourceProvider::includeClassFileEntries));
- } else {
+ } else if (isClassFile(input)) {
builder.addProgramResourceProvider(
new ProgramResourceProvider() {
@Override
@@ -179,6 +185,14 @@
return Collections.singleton(ProgramResource.fromFile(Kind.CF, input));
}
});
+ } else if (isDexFile(input)) {
+ builder.addProgramResourceProvider(
+ new ProgramResourceProvider() {
+ @Override
+ public Collection<ProgramResource> getProgramResources() throws ResourceException {
+ return Collections.singleton(ProgramResource.fromFile(Kind.DEX, input));
+ }
+ });
}
}
D8.run(builder.build());
@@ -266,6 +280,32 @@
}
}
+ // Check API support for all the varg variants.
+ private static void useVArgVariants(
+ int minApiLevel,
+ List<Path> libraries,
+ List<Path> classpath,
+ List<Path> inputs,
+ List<Path> mainDexList) {
+ try {
+ D8.run(
+ D8Command.builder(handler)
+ .setMinApiLevel(minApiLevel)
+ .setProgramConsumer(new EnsureOutputConsumer())
+ .addLibraryFiles(libraries.get(0))
+ .addLibraryFiles(libraries.stream().skip(1).toArray(Path[]::new))
+ .addClasspathFiles(classpath.get(0))
+ .addClasspathFiles(classpath.stream().skip(1).toArray(Path[]::new))
+ .addProgramFiles(inputs.get(0))
+ .addProgramFiles(inputs.stream().skip(1).toArray(Path[]::new))
+ .addMainDexListFiles(mainDexList.get(0))
+ .addMainDexListFiles(mainDexList.stream().skip(1).toArray(Path[]::new))
+ .build());
+ } catch (CompilationFailedException e) {
+ throw new RuntimeException("Unexpected compilation exceptions", e);
+ }
+ }
+
private static void incrementalCompileAndMerge(
int minApiLevel,
Collection<Path> libraries,
@@ -380,6 +420,15 @@
return file.endsWith(".class");
}
+ private static boolean isDexFile(Path file) {
+ return isDexFile(file.toString());
+ }
+
+ private static boolean isDexFile(String file) {
+ file = file.toLowerCase();
+ return file.endsWith(".dex");
+ }
+
private static boolean isArchive(Path file) {
return isArchive(file.toString());
}
diff --git a/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java b/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java
index d069d05..7230f55 100644
--- a/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java
+++ b/src/test/apiUsageSample/com/android/tools/apiusagesample/R8ApiUsageSample.java
@@ -101,21 +101,22 @@
throw new RuntimeException("Must supply pg-conf inputs");
}
- useProgramFileBuilder(CompilationMode.DEBUG, minApiLevel, libraries, inputs);
- useProgramFileBuilder(CompilationMode.RELEASE, minApiLevel, libraries, inputs);
- useProgramDataBuilder(minApiLevel, libraries, inputs);
- useProgramProvider(minApiLevel, libraries, inputs);
- useLibraryProvider(minApiLevel, libraries, inputs);
+ useProgramFileList(CompilationMode.DEBUG, minApiLevel, libraries, inputs);
+ useProgramFileList(CompilationMode.RELEASE, minApiLevel, libraries, inputs);
+ useProgramData(minApiLevel, libraries, inputs);
+ useProgramResourceProvider(minApiLevel, libraries, inputs);
+ useLibraryResourceProvider(minApiLevel, libraries, inputs);
useMainDexListFiles(minApiLevel, libraries, inputs, mainDexList);
useMainDexClasses(minApiLevel, libraries, inputs, mainDexList);
useMainDexRulesFiles(minApiLevel, libraries, inputs, mainDexRules);
useMainDexRules(minApiLevel, libraries, inputs, mainDexRules);
useProguardConfigFiles(minApiLevel, libraries, inputs, mainDexList, pgConf);
useProguardConfigLines(minApiLevel, libraries, inputs, mainDexList, pgConf);
+ useVArgVariants(minApiLevel, libraries, inputs, mainDexList, mainDexRules, pgConf);
}
// Check API support for compiling Java class-files from the file system.
- private static void useProgramFileBuilder(
+ private static void useProgramFileList(
CompilationMode mode, int minApiLevel, Collection<Path> libraries, Collection<Path> inputs) {
try {
R8.run(
@@ -132,7 +133,7 @@
}
// Check API support for compiling Java class-files from byte content.
- private static void useProgramDataBuilder(
+ private static void useProgramData(
int minApiLevel, Collection<Path> libraries, Collection<Path> inputs) {
try {
R8Command.Builder builder =
@@ -152,7 +153,7 @@
}
// Check API support for compiling Java class-files from a program provider abstraction.
- private static void useProgramProvider(
+ private static void useProgramResourceProvider(
int minApiLevel, Collection<Path> libraries, Collection<Path> inputs) {
try {
R8Command.Builder builder =
@@ -181,7 +182,7 @@
}
}
- private static void useLibraryProvider(
+ private static void useLibraryResourceProvider(
int minApiLevel, Collection<Path> libraries, Collection<Path> inputs) {
try {
R8Command.Builder builder =
@@ -339,6 +340,35 @@
}
}
+ // Check API support for all the varg variants.
+ private static void useVArgVariants(
+ int minApiLevel,
+ List<Path> libraries,
+ List<Path> inputs,
+ List<Path> mainDexList,
+ List<Path> mainDexRules,
+ List<Path> pgConf) {
+ try {
+ R8.run(
+ R8Command.builder(handler)
+ .setMinApiLevel(minApiLevel)
+ .setProgramConsumer(new EnsureOutputConsumer())
+ .addLibraryFiles(libraries.get(0))
+ .addLibraryFiles(libraries.stream().skip(1).toArray(Path[]::new))
+ .addProgramFiles(inputs.get(0))
+ .addProgramFiles(inputs.stream().skip(1).toArray(Path[]::new))
+ .addMainDexListFiles(mainDexList.get(0))
+ .addMainDexListFiles(mainDexList.stream().skip(1).toArray(Path[]::new))
+ .addMainDexRulesFiles(mainDexRules.get(0))
+ .addMainDexRulesFiles(mainDexRules.stream().skip(1).toArray(Path[]::new))
+ .addProguardConfigurationFiles(pgConf.get(0))
+ .addProguardConfigurationFiles(pgConf.stream().skip(1).toArray(Path[]::new))
+ .build());
+ } catch (CompilationFailedException e) {
+ throw new RuntimeException("Unexpected compilation exceptions", e);
+ }
+ }
+
// Helpers for tests.
// Some of this reimplements stuff in R8 utils, but that is not public API and we should not
// rely on it.
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index f2a84d9..c3327d9 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -897,12 +897,8 @@
.put("800-smali", TestCondition.match(TestCondition.R8_COMPILER))
// Contains a loop in the class hierarchy.
.put("804-class-extends-itself", TestCondition.any())
- // It is not possible to compute target of method call due to ambiguous methods, thus fail
- // to generate one dex from several dex inputs that represent an invalid program.
- .put("004-JniTest", TestCondition.match(TestCondition.R8_COMPILER))
// These tests have illegal class flag combinations, so we reject them.
.put("161-final-abstract-class", TestCondition.any())
- .put("004-JniTest", TestCondition.any())
.build();
// Tests that does not have dex input for some toolchains.
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 60ebe5f..7d3dbe2 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -483,9 +483,12 @@
// TODO(mikaelpeltier) Android P does not yet have his android.jar use the O version
minSdkVersion = AndroidApiLevel.O.getLevel();
}
- return String.format(
+ String jar = String.format(
ANDROID_JAR_PATTERN,
minSdkVersion == AndroidApiLevel.getDefault().getLevel() ? DEFAULT_MIN_SDK : minSdkVersion);
+ assert Files.exists(Paths.get(jar))
+ : "Expected android jar to exist for API level " + minSdkVersion;
+ return jar;
}
public static Path getJdwpTestsCfJarPath(int minSdk) {
@@ -1127,6 +1130,12 @@
return new ProcessResult(p.exitValue(), stdoutReader.getResult(), stderrReader.getResult());
}
+ public static R8Command.Builder addProguardConfigurationConsumer(
+ R8Command.Builder builder, Consumer<ProguardConfiguration.Builder> consumer) {
+ builder.addProguardConfigurationConsumerForTesting(consumer);
+ return builder;
+ }
+
public static AndroidApp getApp(BaseCommand command) {
return command.getInputApp();
}
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index d4745b4..049a05e 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -93,10 +93,12 @@
builder.setMode(mode);
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
builder.setMinApiLevel(AndroidApiLevel.L.getLevel());
- builder.addProguardConfigurationConsumer(b -> {
- b.setPrintSeeds(false);
- b.setIgnoreWarnings(true);
- });
+ ToolHelper.addProguardConfigurationConsumer(
+ builder,
+ pgConfig -> {
+ pgConfig.setPrintSeeds(false);
+ pgConfig.setIgnoreWarnings(true);
+ });
outputApp = ToolHelper.runR8(builder.build(), optionsConsumer);
} else {
assert compiler == CompilerUnderTest.D8;
diff --git a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
index 070b6da..4c9bbd1 100644
--- a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
@@ -76,12 +76,12 @@
}
ProguardMapConsumer mapConsumer = new ProguardMapConsumer();
runR8(
- getCommandForApps(out, flagForObfuscation, NAMING044_JAR)
- .setProguardMapConsumer(mapConsumer)
- .addProguardConfigurationConsumer(
- c -> {
- c.setPrintMapping(true);
- c.setPrintMappingFile(proguardMap);
+ ToolHelper.addProguardConfigurationConsumer(
+ getCommandForApps(out, flagForObfuscation, NAMING044_JAR)
+ .setProguardMapConsumer(mapConsumer),
+ pgConfig -> {
+ pgConfig.setPrintMapping(true);
+ pgConfig.setPrintMappingFile(proguardMap);
})
.build());
@@ -92,13 +92,13 @@
Path instrOut = temp.newFolder("instr").toPath();
Path flag = Paths.get(ToolHelper.EXAMPLES_DIR, "applymapping044", "keep-rules.txt");
- AndroidApp instrApp = runR8(
- getCommandForInstrumentation(instrOut, flag, NAMING044_JAR, APPLYMAPPING044_JAR)
- .addProguardConfigurationConsumer(c -> {
- c.setApplyMappingFile(proguardMap);
- })
- .setMinification(false)
- .build());
+ AndroidApp instrApp =
+ runR8(
+ ToolHelper.addProguardConfigurationConsumer(
+ getCommandForInstrumentation(instrOut, flag, NAMING044_JAR, APPLYMAPPING044_JAR)
+ .setMinification(false),
+ pgConfig -> pgConfig.setApplyMappingFile(proguardMap))
+ .build());
DexInspector inspector = new DexInspector(instrApp);
MethodSubject main = inspector.clazz("applymapping044.Main").method(DexInspector.MAIN);
@@ -181,14 +181,15 @@
// keep rules to reserve D and E, along with a proguard map.
Path flag = Paths.get(ToolHelper.EXAMPLES_DIR, "naming001", "keep-rules-105.txt");
Path proguardMap = out.resolve(MAPPING);
- AndroidApp outputApp = runR8(
- getCommandForApps(out, flag, NAMING001_JAR)
- .addProguardConfigurationConsumer(c -> {
- c.setPrintMapping(true);
- c.setPrintMappingFile(proguardMap);
- })
- .setMinification(false)
- .build());
+ AndroidApp outputApp =
+ runR8(
+ ToolHelper.addProguardConfigurationConsumer(
+ getCommandForApps(out, flag, NAMING001_JAR).setMinification(false),
+ pgConfig -> {
+ pgConfig.setPrintMapping(true);
+ pgConfig.setPrintMappingFile(proguardMap);
+ })
+ .build());
// Make sure the given proguard map is indeed applied.
DexInspector inspector = new DexInspector(outputApp);
diff --git a/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java b/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
index 9442559..c044d12 100644
--- a/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
@@ -65,15 +65,15 @@
public void generateR8ProcessedApp() throws Exception {
Path out = temp.getRoot().toPath();
R8Command command =
- R8Command.builder()
+ ToolHelper.addProguardConfigurationConsumer(
+ R8Command.builder(),
+ pgConfig -> {
+ pgConfig.setPrintMapping(true);
+ pgConfig.setPrintMappingFile(out.resolve(ToolHelper.DEFAULT_PROGUARD_MAP_FILE));
+ })
.setOutput(out, OutputMode.DexIndexed)
.addProgramFiles(Paths.get(appFileName))
.addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get))
- .addProguardConfigurationConsumer(
- builder -> {
- builder.setPrintMapping(true);
- builder.setPrintMappingFile(out.resolve(ToolHelper.DEFAULT_PROGUARD_MAP_FILE));
- })
.addLibraryFiles(Paths.get(ToolHelper.getDefaultAndroidJar()))
.build();
ToolHelper.runR8(command);
diff --git a/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java b/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
index 34f2b76..d5bb4bb 100644
--- a/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
+++ b/src/test/java/com/android/tools/r8/naming/RenameSourceFileDebugTest.java
@@ -32,18 +32,19 @@
Path outjar = outdir.resolve("r8_compiled.jar");
Path proguardMapPath = outdir.resolve("proguard.map");
ToolHelper.runR8(
- R8Command.builder()
+ ToolHelper.addProguardConfigurationConsumer(
+ R8Command.builder(),
+ pgConfig -> {
+ pgConfig.setRenameSourceFileAttribute(TEST_FILE);
+ pgConfig.addKeepAttributePatterns(
+ ImmutableList.of("SourceFile", "LineNumberTable"));
+ })
.addProgramFiles(DEBUGGEE_JAR)
.setMinApiLevel(minSdk)
.addLibraryFiles(Paths.get(ToolHelper.getAndroidJar(minSdk)))
.setMode(CompilationMode.DEBUG)
.setOutput(outjar, OutputMode.DexIndexed)
.setProguardMapOutput(proguardMapPath)
- .addProguardConfigurationConsumer(
- pg -> {
- pg.setRenameSourceFileAttribute(TEST_FILE);
- pg.addKeepAttributePatterns(ImmutableList.of("SourceFile", "LineNumberTable"));
- })
.build());
config = new DexDebugTestConfig(outjar);
config.setProguardMap(proguardMapPath);
diff --git a/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java b/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
index dafd45e..3446242 100644
--- a/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
@@ -66,14 +66,15 @@
public void runR8andGetPrintUsage() throws Exception {
Path out = temp.getRoot().toPath();
R8Command command =
- R8Command.builder()
+ ToolHelper.addProguardConfigurationConsumer(
+ R8Command.builder(),
+ pgConfig -> {
+ pgConfig.setPrintUsage(true);
+ pgConfig.setPrintUsageFile(out.resolve(test + PRINT_USAGE_FILE_SUFFIX));
+ })
.setOutput(out, OutputMode.DexIndexed)
.addProgramFiles(Paths.get(programFile))
.addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get))
- .addProguardConfigurationConsumer(builder -> {
- builder.setPrintUsage(true);
- builder.setPrintUsageFile(out.resolve(test + PRINT_USAGE_FILE_SUFFIX));
- })
.addLibraryFiles(Paths.get(ANDROID_JAR))
.build();
ToolHelper.runR8(command, options -> {
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index 2f5805a..3670c0b 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -131,17 +131,17 @@
boolean inline = programFile.contains("inlining");
R8Command command =
- R8Command.builder()
+ ToolHelper.addProguardConfigurationConsumer(
+ R8Command.builder(),
+ pgConfig -> {
+ pgConfig.setPrintMapping(true);
+ pgConfig.setPrintMappingFile(out.resolve(ToolHelper.DEFAULT_PROGUARD_MAP_FILE));
+ pgConfig.setOverloadAggressively(minify == MinifyMode.AGGRESSIVE);
+ pgConfig.setObfuscating(minify.isMinify());
+ })
.setOutput(out, OutputMode.DexIndexed)
.addProgramFiles(Paths.get(programFile))
.addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get))
- .addProguardConfigurationConsumer(
- builder -> {
- builder.setPrintMapping(true);
- builder.setPrintMappingFile(out.resolve(ToolHelper.DEFAULT_PROGUARD_MAP_FILE));
- builder.setOverloadAggressively(minify == MinifyMode.AGGRESSIVE);
- builder.setObfuscating(minify.isMinify());
- })
.addLibraryFiles(JAR_LIBRARIES)
.build();
ToolHelper.runR8(command, options -> {
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
index ceb14cc..d997139 100644
--- a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
+++ b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
@@ -97,13 +97,12 @@
try {
Path dexOutputDir = temp.newFolder().toPath();
R8Command command =
- R8Command.builder()
+ ToolHelper.addProguardConfigurationConsumer(R8Command.builder(), pgConsumer)
.addDexProgramData(builder.compile(), EmbeddedOrigin.INSTANCE)
.setOutput(dexOutputDir, OutputMode.DexIndexed)
.setMode(CompilationMode.DEBUG)
.addLibraryFiles(Paths.get(ToolHelper.getDefaultAndroidJar()))
.addProguardConfiguration(proguardConfigurations, Origin.unknown())
- .addProguardConfigurationConsumer(pgConsumer)
.build();
ToolHelper.runR8WithFullResult(command, optionsConsumer);
return dexOutputDir.resolve("classes.dex");
diff --git a/tests/d8_api_usage_sample.jar b/tests/d8_api_usage_sample.jar
index 3f78a93..4f01870 100644
--- a/tests/d8_api_usage_sample.jar
+++ b/tests/d8_api_usage_sample.jar
Binary files differ
diff --git a/tests/r8_api_usage_sample.jar b/tests/r8_api_usage_sample.jar
index e0456f6..5c66037 100644
--- a/tests/r8_api_usage_sample.jar
+++ b/tests/r8_api_usage_sample.jar
Binary files differ
diff --git a/third_party/android_jar/lib-v22.tar.gz.sha1 b/third_party/android_jar/lib-v22.tar.gz.sha1
new file mode 100644
index 0000000..9993d73
--- /dev/null
+++ b/third_party/android_jar/lib-v22.tar.gz.sha1
@@ -0,0 +1 @@
+1b29ed8eff486944080c2e75d1835f88ead804ef
\ No newline at end of file
diff --git a/third_party/android_jar/lib-v23.tar.gz.sha1 b/third_party/android_jar/lib-v23.tar.gz.sha1
new file mode 100644
index 0000000..e3ce8c7
--- /dev/null
+++ b/third_party/android_jar/lib-v23.tar.gz.sha1
@@ -0,0 +1 @@
+961bf14c97ab2880998b9f6c6b74f9e459e474fe
\ No newline at end of file