diff options
author | Googler <noreply@google.com> | 2017-06-30 21:06:22 +0200 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-07-03 09:06:30 +0200 |
commit | 480d6038905b3c8de09a362e2759fc6b8abe634c (patch) | |
tree | b769fdf1bd6fc6f701aef3b416425d474091683e /src/main/java/com/google | |
parent | 8112a5604d6c4d6a182fee78bdb9755659f02024 (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')
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 |