From cb16c5089953127690c8971d32dc3d4cf01b7620 Mon Sep 17 00:00:00 2001 From: ajmichael Date: Mon, 2 Apr 2018 09:26:42 -0700 Subject: Create proguard.txt in android_library AAR output. The proguard.txt is the concatenation of the proguard_specs on the android_library rule itself. Note that it does not include transitively defined proguard_specs. Fixes https://github.com/bazelbuild/bazel/issues/4467 RELNOTES: android_library AAR output now contains proguard.txt PiperOrigin-RevId: 191302610 --- .../build/lib/rules/android/AarGeneratorBuilder.java | 12 ++++++++++++ .../devtools/build/lib/rules/android/AndroidLibrary.java | 4 +++- .../devtools/build/lib/rules/java/ProguardLibrary.java | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src/main/java/com/google/devtools') diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java index fdeb38d739..f259a48cd1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarGeneratorBuilder.java @@ -39,6 +39,7 @@ public class AarGeneratorBuilder { private Artifact manifest; private Artifact rTxt; private Artifact classes; + private ImmutableList proguardSpecs = ImmutableList.of(); private Artifact aarOut; private boolean throwOnResourceConflict; @@ -81,6 +82,11 @@ public class AarGeneratorBuilder { return this; } + public AarGeneratorBuilder setProguardSpecs(ImmutableList proguardSpecs) { + this.proguardSpecs = proguardSpecs; + return this; + } + public AarGeneratorBuilder setThrowOnResourceConflict(boolean throwOnResourceConflict) { this.throwOnResourceConflict = throwOnResourceConflict; return this; @@ -118,6 +124,12 @@ public class AarGeneratorBuilder { ins.add(classes); } + for (Artifact proguardSpec : proguardSpecs) { + args.add("--proguardSpec"); + args.add(proguardSpec.getExecPathString()); + ins.add(proguardSpec); + } + args.add("--aarOutput"); args.add(aarOut.getExecPathString()); outs.add(aarOut); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 6aea0db21b..2a511f2c04 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -121,7 +121,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { collectTransitiveAars(ruleContext, transitiveAars, transitiveAarArtifacts); NestedSetBuilder proguardConfigsbuilder = NestedSetBuilder.stableOrder(); - proguardConfigsbuilder.addTransitive(new ProguardLibrary(ruleContext).collectProguardSpecs()); + ProguardLibrary proguardLibrary = new ProguardLibrary(ruleContext); + proguardConfigsbuilder.addTransitive(proguardLibrary.collectProguardSpecs()); AndroidIdlHelper.maybeAddSupportLibProguardConfigs(ruleContext, proguardConfigsbuilder); NestedSet transitiveProguardConfigs = proguardConfigsbuilder.build(); @@ -237,6 +238,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { .withRtxt(primaryResources.getRTxt()) .withClasses(classesJar) .setAAROut(aarOut) + .setProguardSpecs(proguardLibrary.collectLocalProguardSpecs()) .setThrowOnResourceConflict( ruleContext.getFragment(AndroidConfiguration.class).throwOnResourceConflict()) .build(ruleContext); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java index b412bb2057..cae0ac8ae3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java @@ -89,7 +89,7 @@ public final class ProguardLibrary { /** * Collects the unvalidated proguard specs exported by this rule. */ - private Collection collectLocalProguardSpecs() { + public ImmutableList collectLocalProguardSpecs() { if (!ruleContext.attributes().has(LOCAL_SPEC_ATTRIBUTE, BuildType.LABEL_LIST)) { return ImmutableList.of(); } -- cgit v1.2.3