diff options
Diffstat (limited to 'src/main/java/com/google')
5 files changed, 24 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt index 36e963030b..7707db5cc0 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt @@ -111,6 +111,7 @@ java_import( android_sdk( name = "sdk", + build_tools_version = "%build_tools_version%", proguard = ":proguard_binary", aapt = ":aapt_binary", dx = ":dx_binary", diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java index ee9970874f..465d2bfcfd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java @@ -220,6 +220,10 @@ public class AndroidResourcesProcessorBuilder { List<Artifact> outs = new ArrayList<>(); CustomCommandLine.Builder builder = new CustomCommandLine.Builder(); + if (!Strings.isNullOrEmpty(sdk.getBuildToolsVersion())) { + builder.add("--buildToolsVersion").add(sdk.getBuildToolsVersion()); + } + builder.addExecPath("--aapt", sdk.getAapt().getExecutable()); // Use a FluentIterable to avoid flattening the NestedSets NestedSetBuilder<Artifact> inputs = NestedSetBuilder.naiveLinkOrder(); 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 d4ca2ad1c2..18f0b5b622 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 @@ -297,6 +297,8 @@ public final class AndroidRuleClasses { return builder .requiresConfigurationFragments(JavaConfiguration.class, AndroidConfiguration.class) .setUndocumented() + // build_tools_version is assumed to be the latest version if omitted. + .add(attr("build_tools_version", STRING)) // This is the Proguard that comes from the --proguard_top attribute. .add(attr(":proguard", LABEL).cfg(HOST).value(JavaSemantics.PROGUARD).exec()) // This is the Proguard in the BUILD file that contains the android_sdk rule. Used when diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java index 8904b22e68..2d61a18cba 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java @@ -22,8 +22,10 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.packages.AggregatingAttributeMapper; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.java.JavaConfiguration; +import com.google.devtools.build.lib.syntax.Type; /** * Implementation of the {@code android_sdk} rule. @@ -38,6 +40,8 @@ public class AndroidSdk implements RuleConfiguredTargetFactory { ? ruleContext.getExecutablePrerequisite("proguard", Mode.HOST) : ruleContext.getExecutablePrerequisite(":proguard", Mode.HOST); + String buildToolsVersion = AggregatingAttributeMapper.of(ruleContext.getRule()) + .get("build_tools_version", Type.STRING); FilesToRunProvider aidl = ruleContext.getExecutablePrerequisite("aidl", Mode.HOST); FilesToRunProvider aapt = ruleContext.getExecutablePrerequisite("aapt", Mode.HOST); FilesToRunProvider apkBuilder = ruleContext.getExecutablePrerequisite( @@ -67,6 +71,7 @@ public class AndroidSdk implements RuleConfiguredTargetFactory { .add( AndroidSdkProvider.class, new AndroidSdkProvider( + buildToolsVersion, frameworkAidl, androidJar, shrinkedAndroidJar, diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java index 41e3ee1a50..522c41f3ae 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java @@ -26,6 +26,8 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; */ @Immutable public final class AndroidSdkProvider implements TransitiveInfoProvider { + + private final String buildToolsVersion; private final Artifact frameworkAidl; private final Artifact androidJar; private final Artifact shrinkedAndroidJar; @@ -45,6 +47,7 @@ public final class AndroidSdkProvider implements TransitiveInfoProvider { private final FilesToRunProvider resourceExtractor; public AndroidSdkProvider( + String buildToolsVersion, Artifact frameworkAidl, Artifact androidJar, Artifact shrinkedAndroidJar, @@ -62,6 +65,8 @@ public final class AndroidSdkProvider implements TransitiveInfoProvider { FilesToRunProvider jack, FilesToRunProvider jill, FilesToRunProvider resourceExtractor) { + + this.buildToolsVersion = buildToolsVersion; this.frameworkAidl = frameworkAidl; this.androidJar = androidJar; this.shrinkedAndroidJar = shrinkedAndroidJar; @@ -107,6 +112,13 @@ public final class AndroidSdkProvider implements TransitiveInfoProvider { return true; } + /** + * The value of build_tools_version. May be null or empty. + */ + public String getBuildToolsVersion() { + return buildToolsVersion; + } + public Artifact getFrameworkAidl() { return frameworkAidl; } |