aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-11-03 16:41:02 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-11-03 18:06:34 +0000
commit10a2eb7fb0e3f45f202649723733aa841aecac43 (patch)
tree61736cab6774e40bf3a1d5190d765e6f8193bfce
parenta1bfa6761aafff524ebe682eb40ec95bcb6b6f92 (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
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java7
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.