diff options
author | 2015-11-03 16:41:02 +0000 | |
---|---|---|
committer | 2015-11-03 18:06:34 +0000 | |
commit | 10a2eb7fb0e3f45f202649723733aa841aecac43 (patch) | |
tree | 61736cab6774e40bf3a1d5190d765e6f8193bfce /src/main/java/com/google/devtools/build/lib | |
parent | a1bfa6761aafff524ebe682eb40ec95bcb6b6f92 (diff) |
Add support for proguard's -applymapping option to android_binary.
RELNOTES[NEW]: android_binary now supports proguard_apply_mapping to re-use a
previously generated proguard mapping.
--
MOS_MIGRATED_REVID=106945104
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java | 12 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java | 7 |
2 files changed, 18 insertions, 1 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 a287862241..4e716f80b6 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 @@ -138,6 +138,13 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { return null; } + if (ruleContext.attributes().isAttributeValueExplicitlySpecified("proguard_apply_mapping") + && ruleContext.attributes().get(PROGUARD_SPECS, BuildType.LABEL_LIST).isEmpty()) { + ruleContext.attributeError("proguard_apply_mapping", + "'proguard_apply_mapping' can only be used when 'proguard_specs' is also set"); + return null; + } + // TODO(bazel-team): Find a way to simplify this code. // treeKeys() means that the resulting map sorts the entries by key, which is necessary to // ensure determinism. @@ -281,6 +288,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { Artifact deployJar = createDeployJar(ruleContext, javaSemantics, androidCommon, resourceClasses, ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_BINARY_DEPLOY_JAR)); + Artifact proguardMapping = ruleContext.getPrerequisiteArtifact( + "proguard_apply_mapping", Mode.TARGET); + return createAndroidBinary( ruleContext, @@ -297,7 +307,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { splitResourceApk, resourceClasses, ImmutableList.<Artifact>of(), - null); + proguardMapping); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index 3daf4fee37..cc047a0826 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -679,6 +679,13 @@ com/google/common/base/Objects.class <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ .add(attr("proguard_generate_mapping", BOOLEAN).value(false) .nonconfigurable("value is referenced in an ImplicitOutputsFunction")) + /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(proguard_apply_mapping) --> + File to be used as a mapping for proguard. + ${SYNOPSIS} + A mapping file generated by <code>proguard_generate_mapping</code> to be + re-used to apply the same mapping to a new build. + <!-- #END_BLAZE_RULE.ATTRIBUTE --> */ + .add(attr("proguard_apply_mapping", LABEL).legacyAllowAnyFileType()) /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(legacy_native_support) --> Enables legacy native support, where pre-compiled native libraries are copied directly into the APK. |