aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Alex Humesky <ahumesky@google.com>2016-02-09 17:16:22 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-02-10 10:22:35 +0000
commitd2eaca660e8b06dc38f74fdf78501c6e631abe0e (patch)
treef8d0d88533dbe822c338f3a512e51cac1e809c60 /src
parent51d444355be31dabb1cc45af2d1bdcc67b00abaa (diff)
Adds a build_tools_version attribute to the android_sdk rule so that the android
build tools version can be used to determine which features to use. -- MOS_MIGRATED_REVID=114225514
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java12
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java7
6 files changed, 31 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;
}
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
index 5d22faac75..f468e8aa96 100644
--- a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
+++ b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
@@ -90,6 +90,13 @@ public class AndroidResourceProcessingAction {
// TODO(bazel-team): Determine what the API version changes in AndroidBuilder.
public FullRevision apiVersion;
+ @Option(name = "buildToolsVersion",
+ defaultValue = "null",
+ converter = FullRevisionConverter.class,
+ category = "config",
+ help = "Version of the build tools (e.g. aapt) being used, e.g. 23.0.2")
+ public FullRevision buildToolsVersion;
+
@Option(name = "aapt",
defaultValue = "null",
converter = ExistingPathConverter.class,