aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-06-30 21:06:22 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-07-03 09:06:30 +0200
commit480d6038905b3c8de09a362e2759fc6b8abe634c (patch)
treeb769fdf1bd6fc6f701aef3b416425d474091683e /src/main/java/com/google
parent8112a5604d6c4d6a182fee78bdb9755659f02024 (diff)
Add minSdkVersion optimization to Blaze.
This optimization reduces the size of Android apps that use Proguard by ~0.2 - 0.3% depending on the minSdkVersion. RELNOTES: None. PiperOrigin-RevId: 160673030
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java6
-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/AndroidSemantics.java3
3 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
index 31eedc4da4..e7fee2789b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
@@ -91,6 +91,12 @@ public class BazelAndroidSemantics implements AndroidSemantics {
}
@Override
+ public ImmutableList<Artifact> getProguardSpecsForManifest(
+ RuleContext ruleContext, Artifact manifest) {
+ return ImmutableList.of();
+ }
+
+ @Override
public void addCoverageSupport(RuleContext ruleContext, AndroidCommon common,
JavaSemantics javaSemantics, boolean forAndroidTest, Builder attributes,
JavaCompilationArtifacts.Builder artifactsBuilder) {
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 438748c5ec..0be53c07f2 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
@@ -422,6 +422,18 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ImmutableList<Artifact> proguardSpecs = ProguardHelper.collectTransitiveProguardSpecs(
ruleContext, ImmutableList.of(resourceApk.getResourceProguardConfig()));
+ // NB: Order here is important. We're including generated Proguard specs before the user's specs
+ // so that they can override values.
+ if (!proguardSpecs.isEmpty()) {
+ proguardSpecs =
+ ImmutableList.<Artifact>builder()
+ .addAll(
+ androidSemantics.getProguardSpecsForManifest(
+ ruleContext, applicationManifest.getManifest()))
+ .addAll(proguardSpecs)
+ .build();
+ }
+
boolean rexEnabled =
ruleContext.getFragment(AndroidConfiguration.class).useRexToCompressDexFiles()
|| (ruleContext.attributes().get("rewrite_dexes_with_rex", Type.BOOLEAN));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java
index b791b69f01..cd2e1eeecc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java
@@ -97,6 +97,9 @@ public interface AndroidSemantics {
*/
Artifact getApkDebugSigningKey(RuleContext ruleContext);
+ /** Given an Android {@code manifest}, returns a list of relevant Proguard specs. */
+ ImmutableList<Artifact> getProguardSpecsForManifest(RuleContext ruleContext, Artifact manifest);
+
/**
* Add coverage instrumentation to the Java compilation of an Android binary.
* @throws InterruptedException