diff options
author | corysmith <corysmith@google.com> | 2018-08-02 15:03:10 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-02 15:04:46 -0700 |
commit | f891b815289a25abac7fe40780bbf7870f020ec4 (patch) | |
tree | 32245443fa283c12141d25c5189e3071eed0ad29 /src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java | |
parent | 077ef5b5079a0804658e493cd4b0a288bcc710b1 (diff) |
Tool attribute processing added to resource shrinking.
RELNOTES: None
PiperOrigin-RevId: 207171755
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java | 24 |
1 files changed, 23 insertions, 1 deletions
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<String, Set<String>> 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<String, Set<String>> 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; |