aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google
diff options
context:
space:
mode:
authorGravatar corysmith <corysmith@google.com>2017-08-24 21:38:41 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-25 12:53:47 +0200
commitebafc963884149086bf915da3267f1778270a0ae (patch)
tree58fb9347d1702bf684b0112c1af9c2180a981783 /src/tools/android/java/com/google
parente7e0f87cb69ecf69503b3fbe82ab12c62f383666 (diff)
Enable using a parameter for large lists of resources to link.
RELNOTES: None PiperOrigin-RevId: 166379334
Diffstat (limited to 'src/tools/android/java/com/google')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/AaptCommandBuilder.java25
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java4
2 files changed, 27 insertions, 2 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/AaptCommandBuilder.java b/src/tools/android/java/com/google/devtools/build/android/AaptCommandBuilder.java
index 6e9c9a41ab..ad645a6fdd 100644
--- a/src/tools/android/java/com/google/devtools/build/android/AaptCommandBuilder.java
+++ b/src/tools/android/java/com/google/devtools/build/android/AaptCommandBuilder.java
@@ -23,9 +23,11 @@ import com.google.common.io.CharStreams;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
import java.util.List;
+import java.util.stream.Collectors;
import javax.annotation.Nullable;
/**
@@ -110,6 +112,29 @@ public class AaptCommandBuilder {
return this;
}
+ /**
+ * Adds a flag to the builder multiple times, once for each value in the given collection. {@code
+ * null} values will be skipped. If the collection is empty, nothing will be added. The values
+ * will be added in the source collection's iteration order. See {@link
+ * AaptCommandBuilder#addRepeated(String, Collection)} for more information. If the collection
+ * exceed 200 items, the values will be written to a file and passed as &lt;flag&gt @&lt;file&gt;.
+ */
+ public AaptCommandBuilder addParameterableRepeated(
+ final String flag, Collection<String> values, Path workingDirectory) throws IOException {
+ Preconditions.checkNotNull(flag);
+ Preconditions.checkNotNull(workingDirectory);
+ if (values.size() > 200) {
+ add(
+ flag,
+ "@" + Files.write(
+ Files.createDirectories(workingDirectory).resolve("params" + flag),
+ ImmutableList.of(values.stream().collect(Collectors.joining(" ")))));
+ } else {
+ addRepeated(flag, values);
+ }
+ return this;
+ }
+
/** Adds the next flag to the builder only if the condition is true. */
public ConditionalAaptCommandBuilder when(boolean condition) {
if (condition) {
diff --git a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java
index dc6ab34aff..8efbc5ca8d 100644
--- a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java
+++ b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java
@@ -63,7 +63,6 @@ public class ResourceLinker {
return new ResourceLinker(aapt2, workingDirectory);
}
-
/** Dependent static libraries to be linked to. */
public ResourceLinker dependencies(List<StaticLibrary> libraries) {
this.linkAgainst = libraries;
@@ -158,7 +157,8 @@ public class ResourceLinker {
.addRepeated("-A", compiled.getAssetsStrings())
.addRepeated("-I", StaticLibrary.toPathStrings(linkAgainst))
.addRepeated("-R", StaticLibrary.toPathStrings(include))
- .addRepeated("-R", unzipCompiledResources(compiled.getZip()))
+ .addParameterableRepeated(
+ "-R", unzipCompiledResources(compiled.getZip()), workingDirectory)
// Never compress apks.
.add("-0", "apk")
// Add custom no-compress extensions.