From f891b815289a25abac7fe40780bbf7870f020ec4 Mon Sep 17 00:00:00 2001 From: corysmith Date: Thu, 2 Aug 2018 15:03:10 -0700 Subject: Tool attribute processing added to resource shrinking. RELNOTES: None PiperOrigin-RevId: 207171755 --- .../devtools/build/android/ResourcesZip.java | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java') diff --git a/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java b/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java index ee8e57df8f..3e1ecda49e 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java +++ b/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java @@ -14,9 +14,13 @@ package com.google.devtools.build.android; import static com.google.common.base.Predicates.not; +import static java.util.stream.Collectors.toMap; +import com.android.SdkConstants; +import com.android.annotations.VisibleForTesting; import com.android.build.gradle.tasks.ResourceUsageAnalyzer; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.io.ByteStreams; import com.google.devtools.build.android.AndroidResourceOutputs.ZipBuilder; import com.google.devtools.build.android.AndroidResourceOutputs.ZipBuilderVisitorWithDirectories; @@ -25,12 +29,15 @@ import com.google.devtools.build.android.aapt2.ProtoApk; import com.google.devtools.build.android.aapt2.ProtoResourceUsageAnalyzer; import com.google.devtools.build.android.aapt2.ResourceCompiler; import com.google.devtools.build.android.aapt2.ResourceLinker; +import com.google.devtools.build.android.proto.SerializeFormat.ToolAttributes; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.logging.Logger; @@ -245,13 +252,28 @@ public class ResourcesZip { throws ParserConfigurationException, IOException, SAXException { final Path shrunkApkProto = workingDirectory.resolve("shrunk.apk.pb"); try (final ProtoApk apk = ProtoApk.readFrom(proto)) { + final Map> toolAttributes = toAttributes(); // record resources and manifest new ProtoResourceUsageAnalyzer(packages, proguardMapping, logFile) - .shrink(apk, classJar, shrunkApkProto); + .shrink( + apk, + classJar, + shrunkApkProto, + toolAttributes.getOrDefault(SdkConstants.ATTR_KEEP, ImmutableSet.of()), + toolAttributes.getOrDefault(SdkConstants.ATTR_DISCARD, ImmutableSet.of())); return new ShrunkProtoApk(shrunkApkProto, logFile); } } + @VisibleForTesting + public Map> toAttributes() throws IOException { + return ToolAttributes.parseFrom(Files.readAllBytes(attributes)) + .getAttributesMap() + .entrySet() + .stream() + .collect(toMap(Entry::getKey, e -> ImmutableSet.copyOf(e.getValue().getValuesList()))); + } + static class ShrunkProtoApk { private final Path apk; private final Path report; -- cgit v1.2.3