aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-12-08 10:52:11 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-08 10:54:13 -0800
commit8817ba85138a19225b567b56145d1cda08d4a3c4 (patch)
tree68a81b8fa5507db58f66f068fd7260398ade4720 /src/main/java/com
parent367f704e71f352b404df38161f4c367b9ff506c9 (diff)
Stop filtering resources in analysis in aapt2 builds
aapt2 always gets the complete, unfiltered resources, and then filters them in execution. Save time by not uselessly filtering in analysis. RELNOTES: none PiperOrigin-RevId: 178397137
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java36
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java2
4 files changed, 38 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
index ff521ecd3d..feda3f6a47 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
@@ -81,7 +81,7 @@ public class AndroidResourcesProcessorBuilder {
private Artifact rTxtOut;
private Artifact sourceJarOut;
private boolean debug = false;
- private ResourceFilterFactory resourceFilterFactory;
+ private ResourceFilterFactory resourceFilterFactory = ResourceFilterFactory.empty();
private List<String> uncompressedExtensions = Collections.emptyList();
private Artifact apkOut;
private final AndroidSdkProvider sdk;
@@ -113,7 +113,6 @@ public class AndroidResourcesProcessorBuilder {
this.sdk = AndroidSdkProvider.fromRuleContext(ruleContext);
this.ruleContext = ruleContext;
this.spawnActionBuilder = new SpawnAction.Builder();
- this.resourceFilterFactory = ResourceFilterFactory.empty(ruleContext);
}
/**
@@ -317,6 +316,10 @@ public class AndroidResourcesProcessorBuilder {
builder.add("--conditionalKeepRules");
}
+ if (resourceFilterFactory.hasDensities()) {
+ builder.add("--densities", resourceFilterFactory.getDensityString());
+ }
+
configureCommonFlags(outs, inputs, builder);
ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED);
@@ -383,6 +386,21 @@ public class AndroidResourcesProcessorBuilder {
builder.addExecPath("--aapt", sdk.getAapt().getExecutable());
configureCommonFlags(outs, inputs, builder);
+ if (resourceFilterFactory.hasDensities()) {
+ // If we did not filter by density in analysis, filter in execution. Otherwise, don't filter
+ // in execution, but still pass the densities so they can be added to the manifest.
+ if (resourceFilterFactory.isPrefiltering()) {
+ builder.add("--densitiesForManifest", resourceFilterFactory.getDensityString());
+ } else {
+ builder.add("--densities", resourceFilterFactory.getDensityString());
+ }
+ }
+ ImmutableList<String> filteredResources =
+ resourceFilterFactory.getResourcesToIgnoreInExecution();
+ if (!filteredResources.isEmpty()) {
+ builder.addAll("--prefilteredResources", VectorArg.join(",").each(filteredResources));
+ }
+
ParamFileInfo.Builder paramFileInfo = ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED);
// Some flags (e.g. --mainData) may specify lists (or lists of lists) separated by special
// characters (colon, semicolon, hashmark, ampersand) that don't work on Windows, and quoting
@@ -489,20 +507,6 @@ public class AndroidResourcesProcessorBuilder {
// might remove resources that we previously accepted.
builder.add("--resourceConfigs", resourceFilterFactory.getConfigurationFilterString());
}
- if (resourceFilterFactory.hasDensities()) {
- // If we did not filter by density in analysis, filter in execution. Otherwise, don't filter
- // in execution, but still pass the densities so they can be added to the manifest.
- if (resourceFilterFactory.isPrefiltering()) {
- builder.add("--densitiesForManifest", resourceFilterFactory.getDensityString());
- } else {
- builder.add("--densities", resourceFilterFactory.getDensityString());
- }
- }
- ImmutableList<String> filteredResources =
- resourceFilterFactory.getResourcesToIgnoreInExecution();
- if (!filteredResources.isEmpty()) {
- builder.addAll("--prefilteredResources", VectorArg.join(",").each(filteredResources));
- }
if (!uncompressedExtensions.isEmpty()) {
builder.addAll("--uncompressedExtensions", VectorArg.join(",").each(uncompressedExtensions));
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
index df468bfa52..8b406cb82d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
@@ -862,7 +862,7 @@ public final class ApplicationManifest {
boolean createSource,
Artifact proguardCfg,
@Nullable Artifact mainDexProguardCfg)
- throws InterruptedException {
+ throws InterruptedException, RuleErrorException {
TransitiveInfoCollection resourcesPrerequisite =
ruleContext.getPrerequisite("resources", Mode.TARGET);
@@ -919,8 +919,7 @@ public final class ApplicationManifest {
for (String extension : uncompressedExtensions) {
additionalAaptOpts.add("-0").add(extension);
}
- if (resourceFilterFactory.hasConfigurationFilters()
- && !resourceFilterFactory.isPrefiltering()) {
+ if (resourceFilterFactory.hasConfigurationFilters()) {
additionalAaptOpts.add("-c").add(resourceFilterFactory.getConfigurationFilterString());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java
index a77946803e..189a14a765 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java
@@ -34,6 +34,7 @@ import com.google.devtools.build.lib.analysis.config.PatchTransition;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
+import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.OptionsParsingException;
@@ -197,16 +198,22 @@ public class ResourceFilterFactory {
return ImmutableList.sortedCopyOf(builder.build());
}
- static ResourceFilterFactory fromRuleContext(RuleContext ruleContext) {
+ static ResourceFilterFactory fromRuleContext(RuleContext ruleContext) throws RuleErrorException {
Preconditions.checkNotNull(ruleContext);
if (!ruleContext.isLegalFragment(AndroidConfiguration.class)) {
- return empty(DEFAULT_BEHAVIOR);
+ return empty();
}
- return forBaseAndAttrs(
- ruleContext.getFragment(AndroidConfiguration.class).getResourceFilterFactory(),
- ruleContext.attributes());
+ ResourceFilterFactory base;
+ if (AndroidAaptVersion.chooseTargetAaptVersion(ruleContext) == AndroidAaptVersion.AAPT2) {
+ // aapt2 must have access to all of the resources in execution, so don't filter in analysis.
+ base = empty(FilterBehavior.FILTER_IN_EXECUTION);
+ } else {
+ base = ruleContext.getFragment(AndroidConfiguration.class).getResourceFilterFactory();
+ }
+
+ return forBaseAndAttrs(base, ruleContext.attributes());
}
@VisibleForTesting
@@ -224,7 +231,7 @@ public class ResourceFilterFactory {
*/
ResourceFilterFactory withAttrsFrom(AttributeMap attrs) {
if (!hasFilters(attrs)) {
- return new ResourceFilterFactory(configFilters, densities, filterBehavior);
+ return this;
}
return new ResourceFilterFactory(
@@ -382,8 +389,8 @@ public class ResourceFilterFactory {
}
}
- static ResourceFilterFactory empty(RuleContext ruleContext) {
- return empty(fromRuleContext(ruleContext).filterBehavior);
+ static ResourceFilterFactory empty() {
+ return empty(DEFAULT_BEHAVIOR);
}
@VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java
index 8844451581..fb1fb56d67 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java
@@ -58,7 +58,7 @@ public class ResourceShrinkerActionBuilder {
this.ruleContext = ruleContext;
this.spawnActionBuilder = new SpawnAction.Builder();
this.sdk = AndroidSdkProvider.fromRuleContext(ruleContext);
- this.resourceFilterFactory = ResourceFilterFactory.empty(ruleContext);
+ this.resourceFilterFactory = ResourceFilterFactory.empty();
}
public ResourceShrinkerActionBuilder setUncompressedExtensions(