aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt72
3 files changed, 98 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
index b03a94f482..445d754262 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
@@ -15,15 +15,21 @@ package com.google.devtools.build.lib.bazel.rules.android;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.bazel.repository.RepositoryFunction;
+import com.google.devtools.build.lib.packages.AttributeMap;
+import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.packages.Rule;
+import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.skyframe.FileValue;
+import com.google.devtools.build.lib.util.ResourceFileLoader;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
+import java.io.IOException;
+
/**
* Implementation of the {@code android_sdk} repository rule.
*/
@@ -48,7 +54,23 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction {
return null;
}
- return writeBuildFile(directoryValue, "filegroup(name='sdk')");
+ AttributeMap attributes = NonconfigurableAttributeMapper.of(rule);
+ String buildToolsVersion = attributes.get("build_tools_version", Type.STRING);
+ Integer apiLevel = attributes.get("api_level", Type.INTEGER);
+
+ String template;
+ try {
+ template = ResourceFileLoader.loadResource(
+ AndroidSdkRepositoryFunction.class, "android_sdk_repository_template.txt");
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+
+ String buildFile = template
+ .replaceAll("%build_tools_version%", buildToolsVersion)
+ .replaceAll("%api_level%", apiLevel.toString());
+
+ return writeBuildFile(directoryValue, buildFile);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java
index 2fbc6d6791..200de575ca 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java
@@ -36,9 +36,9 @@ public class AndroidSdkRepositoryRule implements RuleDefinition {
return builder
.setUndocumented()
.setWorkspaceOnly()
- .add(attr("path", STRING).mandatory())
- .add(attr("build_tools", STRING).mandatory())
- .add(attr("api_level", INTEGER).mandatory())
+ .add(attr("path", STRING).mandatory().nonconfigurable("WORKSPACE rule"))
+ .add(attr("build_tools_version", STRING).mandatory().nonconfigurable("WORKSPACE rule"))
+ .add(attr("api_level", INTEGER).mandatory().nonconfigurable("WORKSPACE rule"))
.build();
}
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
new file mode 100644
index 0000000000..46bfb81323
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt
@@ -0,0 +1,72 @@
+android_sdk(
+ name = "sdk",
+ proguard = "tools/proguard/bin/proguard.sh",
+ aapt = "build-tools/%build_tools_version%/aapt",
+ dx = "build-tools/%build_tools_version%/dx",
+ main_dex_list_creator = ":main_dex_list_creator",
+ adb = "platform-tools/adb",
+ framework_aidl = "platforms/android-%api_level%/framework.aidl",
+ aidl = "build-tools/%build_tools_version%/aidl",
+ android_jar = "platforms/android-%api_level%/android.jar",
+ shrinked_android_jar = "platforms/android-%api_level%/android.jar",
+ annotations_jar = "tools/support/annotations.jar",
+ main_dex_classes = "build-tools/%build_tools_version%/mainDexClasses.rules",
+ apkbuilder = ":apkbuilder",
+ zipalign = "build-tools/%build_tools_version%/zipalign",
+ visibility = ["//visibility:public"])
+
+genrule(
+ name = "main_dex_list_creator_source",
+ srcs = [],
+ outs = ["main_dex_list_creator.sh"],
+ cmd = "cat > $@ <<'EOF'\n" +
+ "#!/bin/bash\n" +
+ "\n" +
+ "MAIN_DEX_LIST=$$1\n" +
+ "STRIPPED_JAR=$$2\n" +
+ "JAR=$$3\n" +
+ "" +
+ "DIRNAME=$$(dirname $$0)\n" +
+ "JAVA_BINARY=TBD/main_dex_list_creator_java\n" + # Proper runfiles path comes here
+ "$$JAVA_BINARY $$STRIPPED_JAR $$JAR > $$MAIN_DEX_LIST\n" +
+ "exit $$?\n" +
+ "\n" +
+ "EOF\n",
+)
+
+sh_binary(
+ name = "main_dex_list_creator",
+ srcs = ["main_dex_list_creator.sh"],
+ data = [":main_dex_list_creator_java"],
+)
+
+java_binary(
+ name = "main_dex_list_creator_java",
+ main_class = "com.android.multidex.ClassReferenceListBuilder",
+ runtime_deps = [":dx_jar_import"],
+)
+
+java_binary(
+ name = "dx_binary",
+ main_class = "com.android.dx.command.Main",
+ runtime_deps = [":dx_jar_import"],
+)
+
+filegroup(
+ name = "dx_jar",
+ srcs = ["build-toold/%build_tools_version%/lib/dx.jar"],
+)
+
+java_import(
+ name = "dx_jar_import",
+ jars = [":dx_jar"],
+)
+
+java_binary(
+ name = "apkbuilder",
+ runtime_deps = [":sdklib"],
+ main_class = "com.android.sdklib.build.ApkBuilderMain")
+
+java_import(
+ name = "sdklib",
+ jars = ["tools/lib/sdklib.jar", "tools/lib/common.jar"])