diff options
author | 2016-10-14 20:08:38 +0000 | |
---|---|---|
committer | 2016-10-14 20:26:32 +0000 | |
commit | 183147eef8c03304b3e3a64a0f26ad3bd4bc0a87 (patch) | |
tree | 96cba28f86a8555220291376d4085c44c02b8697 /src/main/java/com/google/devtools/build/lib/rules/android | |
parent | f09a577fe5fb09048458d20d5addecca0ffb10f8 (diff) |
Add a flag to android_binary to allow resource shrinking to be controlled on a per-target basis. This flag only affects builds that have --experimental_android_resource_shrinking enabled. This will allow us to enable and disable the feature without needing to update [] or Rapid configs and on a module by module basis inside GmsCore. It will also let us enable/disable for GmsCore modules on a team by team basis.
Tested by adding to an android_binary target and building with the resource shrinking flag enabled.
--
MOS_MIGRATED_REVID=136189212
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java | 19 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java | 18 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index cd0a3c4bad..21984932a9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -338,6 +338,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { ruleContext.assertNoErrors(); } + boolean shrinkResources = shouldShrinkResources(ruleContext); + JavaTargetAttributes resourceClasses = androidCommon.init( javaSemantics, androidSemantics, @@ -371,7 +373,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { incrementalResourceApk, instantRunResourceApk, splitResourceApk, - /* shrinkResources */ true, + shrinkResources, resourceClasses, ImmutableList.<Artifact>of(), ImmutableList.<Artifact>of(), @@ -1029,14 +1031,25 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { return new ProguardOutput(deployJarArtifact, null, null, null, null, null); } + /** Returns {@code true} if resource shrinking should be performed. */ + private static boolean shouldShrinkResources(RuleContext ruleContext) { + TriState state = ruleContext.attributes().get("shrink_resources", BuildType.TRISTATE); + if (state == TriState.AUTO) { + boolean globalShrinkResources = + ruleContext.getFragment(AndroidConfiguration.class).useAndroidResourceShrinking(); + state = (globalShrinkResources) ? TriState.YES : TriState.NO; + } + + return (state == TriState.YES); + } + private static ResourceApk shrinkResources( RuleContext ruleContext, ResourceApk resourceApk, ImmutableList<Artifact> proguardSpecs, ProguardOutput proguardOutput) throws InterruptedException { - if (ruleContext.getFragment(AndroidConfiguration.class).useAndroidResourceShrinking() - && LocalResourceContainer.definesAndroidResources(ruleContext.attributes()) + if (LocalResourceContainer.definesAndroidResources(ruleContext.attributes()) && !proguardSpecs.isEmpty()) { Artifact apk = new ResourceShrinkerActionBuilder(ruleContext) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java index f901c6c5bc..e09b2b6389 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.rules.android; import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST; import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL; +import static com.google.devtools.build.lib.packages.BuildType.TRISTATE; import static com.google.devtools.build.lib.syntax.Type.BOOLEAN; import static com.google.devtools.build.lib.syntax.Type.STRING; import static com.google.devtools.build.lib.syntax.Type.STRING_DICT; @@ -26,6 +27,7 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; +import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidManifestMerger; /** @@ -83,6 +85,22 @@ public final class AndroidBinaryOnlyRule implements RuleDefinition { apk to only the ones in the 'en' configuration. <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ .add(attr("resource_configuration_filters", STRING_LIST)) + /* <!-- #BLAZE_RULE(android_binary).ATTRIBUTE(shrink_resources) --> + Do resource shrinking (or not). This allows resource shrinking to be controlled on a per + target basis and will only be used if Android resource shrinking is enabled globally. This + is only supported for local resources (not android_resources). + <p>Possible values: + <ul> + <li><code>shrink_resources = 1</code>: Turns on Android resource shrinking</li> + <li><code>shrink_resources = 0</code>: Turns off Android resource shrinking</li> + <li><code>shrink_resources = -1</code>: Shrinking is controlled by the + <a href="../blaze-user-manual.html#flag--android_resource_shrinking"> + --android_resource_shrinking</a> flag.</li> + </ul> + <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ + .add(attr("shrink_resources", TRISTATE) + .value(TriState.AUTO) + .undocumented("Android resource shrinking is still experimental")) /* <!-- #BLAZE_RULE(android_binary).ATTRIBUTE(densities) --> Densities to filter for when building the apk. This will strip out raster drawable resources that would not be loaded by a device with |