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/aapt2/ProtoResourceUsageAnalyzer.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/aapt2/ProtoResourceUsageAnalyzer.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/aapt2/ProtoResourceUsageAnalyzer.java | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/aapt2/ProtoResourceUsageAnalyzer.java b/src/tools/android/java/com/google/devtools/build/android/aapt2/ProtoResourceUsageAnalyzer.java index af81ce0305..171bbf3791 100644 --- a/src/tools/android/java/com/google/devtools/build/android/aapt2/ProtoResourceUsageAnalyzer.java +++ b/src/tools/android/java/com/google/devtools/build/android/aapt2/ProtoResourceUsageAnalyzer.java @@ -14,11 +14,14 @@ package com.google.devtools.build.android.aapt2; +import static java.util.stream.Collectors.joining; + import com.android.build.gradle.tasks.ResourceUsageAnalyzer; import com.android.resources.ResourceType; import com.android.tools.lint.checks.ResourceUsageModel; import com.android.tools.lint.checks.ResourceUsageModel.Resource; import com.android.tools.lint.detector.api.LintUtils; +import com.android.utils.XmlUtils; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableSet; @@ -27,17 +30,20 @@ import com.google.devtools.build.android.aapt2.ProtoApk.ReferenceVisitor; import com.google.devtools.build.android.aapt2.ProtoApk.ResourcePackageVisitor; import com.google.devtools.build.android.aapt2.ProtoApk.ResourceValueVisitor; import com.google.devtools.build.android.aapt2.ProtoApk.ResourceVisitor; -import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.logging.Logger; import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Attr; import org.w3c.dom.DOMException; +import org.w3c.dom.NamedNodeMap; +import org.xml.sax.SAXException; /** A resource usage analyzer tha functions on apks in protocol buffer format. */ public class ProtoResourceUsageAnalyzer extends ResourceUsageAnalyzer { @@ -63,8 +69,16 @@ public class ProtoResourceUsageAnalyzer extends ResourceUsageAnalyzer { * @param apk An apk in the aapt2 proto format. * @param classes The associated classes for the apk. * @param destination Where to write the reduced resources. + * @param keep A list of resource urls to keep, unused or not. + * @param discard A list of resource urls to always discard. */ - public void shrink(ProtoApk apk, Path classes, Path destination) throws IOException { + public void shrink( + ProtoApk apk, + Path classes, + Path destination, + Collection<String> keep, + Collection<String> discard) + throws IOException, ParserConfigurationException, SAXException { // record resources and manifest apk.visitResources( @@ -75,6 +89,22 @@ public class ProtoResourceUsageAnalyzer extends ResourceUsageAnalyzer { recordClassUsages(classes); + // Have to give the model xml attributes with keep and discard urls. + final NamedNodeMap toolAttributes = + XmlUtils.parseDocument( + String.format( + "<resources xmlns:tools='http://schemas.android.com/tools' tools:keep='%s'" + + " tools:discard='%s'></resources>", + keep.stream().collect(joining(",")), discard.stream().collect(joining(","))), + true) + .getDocumentElement() + .getAttributes(); + + for (int i = 0; i < toolAttributes.getLength(); i++) { + model().recordToolsAttributes((Attr) toolAttributes.item(i)); + } + model().processToolsAttributes(); + keepPossiblyReferencedResources(); dumpReferences(); @@ -187,7 +217,6 @@ public class ProtoResourceUsageAnalyzer extends ResourceUsageAnalyzer { @Override public ReferenceVisitor entering(Path path) { - declaredResource.addLocation(new File(path.toString())); return this; } |