aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-09-04 11:55:18 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2015-09-04 12:52:48 +0000
commit87374e6e75aeaf958881be4522063949ad557796 (patch)
tree343b597e0bc6cf3c16d2c3ca816d3ded7f90f928 /src/main/java/com/google/devtools/build
parent4baefdc226efc9d446c9f5d24a03b799e24e661e (diff)
Make android_binary use a constant, hard-coded, checked-in debug key.
This is because apkbuilder uses $HOME/.android/debug.keystore by default, which does not exist when running within the sandbox, thus, it always generates a new debug key, and thus, "adb install -r" doesn't work. -- MOS_MIGRATED_REVID=102331570
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidRepositoryRules.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt65
4 files changed, 60 insertions, 23 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidRepositoryRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidRepositoryRules.java
index 3ecc180d0e..9c5b4eca3a 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidRepositoryRules.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidRepositoryRules.java
@@ -50,7 +50,8 @@ public class AndroidRepositoryRules {
"resources_processor",
"aar_generator",
"shuffle_jars",
- "merge_dexzips");
+ "merge_dexzips",
+ "debug_keystore");
private static final Function<? super Rule, Map<String, Label>> BINDINGS_FUNCTION =
new Function< Rule, Map<String, Label>>() {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
index 54a2e531ad..dfa2ab2ef1 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
@@ -13,8 +13,10 @@
// limitations under the License.
package com.google.devtools.build.lib.bazel.rules.android;
+import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST;
import static com.google.devtools.build.lib.packages.Attribute.attr;
+import com.google.devtools.build.lib.Constants;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses;
@@ -38,6 +40,10 @@ public class BazelAndroidBinaryRule implements RuleDefinition {
return builder
.requiresConfigurationFragments(
AndroidConfiguration.class, JavaConfiguration.class, CppConfiguration.class)
+ .add(attr("$debug_keystore", Type.LABEL)
+ .cfg(HOST)
+ .singleArtifact()
+ .value(environment.getLabel(Constants.ANDROID_DEP_PREFIX + "debug_keystore")))
.add(attr(":cc_toolchain_split", Type.LABEL)
.cfg(AndroidRuleClasses.ANDROID_SPLIT_TRANSITION)
.value(BazelCppRuleClasses.CC_TOOLCHAIN))
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 691a04a60c..366bfcfad1 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
@@ -14,7 +14,9 @@
package com.google.devtools.build.lib.bazel.rules.android;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
@@ -73,7 +75,12 @@ public class BazelAndroidSemantics implements AndroidSemantics {
// file specified on the command line. Currently, it checks $ANDROID_SDK_HOME, $USER_HOME then
// $HOME which means that we could make it hermetic by setting $ANDROID_SDK_HOME for the
// ApkBuilder invocation.
- if (!sign) {
+ if (sign) {
+ Artifact debugKeyStore = ruleContext.getPrerequisiteArtifact("$debug_keystore", Mode.HOST);
+ actionBuilder
+ .addInput(debugKeyStore)
+ .setEnvironment(ImmutableMap.of("KEYSTORE", debugKeyStore.getExecPath().getPathString()));
+ } else {
actionBuilder.addArgument("-u");
}
}
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 22f6c3822f..cb883c82ce 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
@@ -31,7 +31,7 @@ android_sdk(
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",
+ apkbuilder = ":apkbuilder_binary",
zipalign = ":zipalign_binary",
android_jack = ":empty",
jack = ":fail",
@@ -48,14 +48,13 @@ filegroup(
name = tool + "_runner",
outs = [tool + "_runner.sh"],
srcs = [],
- cmd = "cat > $@ << 'EOF'\n" +
- "#!/bin/bash\n" +
- "BINARY=$${0##*-out/host/bin/}\n" +
- "DIRNAME=$$(dirname $$BINARY)\n" +
- "SDK=$${0}.runfiles/$${DIRNAME}\n" +
- "$${SDK}/build-tools/%build_tools_version%/" + tool + " $$*\n" +
- "exit $$?\n" +
- "EOF\n",
+ cmd = "\n".join(["cat > $@ << 'EOF'",
+ "#!/bin/bash -e",
+ "BINARY=$${0##*-out/host/bin/}",
+ "DIRNAME=$$(dirname $$BINARY)",
+ "SDK=$${0}.runfiles/$${DIRNAME}",
+ "exec $${SDK}/build-tools/%build_tools_version%/" + tool + " $$*",
+ "EOF\n"]),
) for tool in ["aapt", "aidl", "zipalign"]]
[sh_binary(
@@ -83,19 +82,19 @@ 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" +
+ cmd = "\n".join(["cat > $@ <<'EOF'",
+ "#!/bin/bash",
+ "",
+ "MAIN_DEX_LIST=$$1",
+ "STRIPPED_JAR=$$2",
+ "JAR=$$3",
"" +
- "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",
+ "DIRNAME=$$(dirname $$0)",
+ "JAVA_BINARY=TBD/main_dex_list_creator_java", # Proper runfiles path comes here
+ "$$JAVA_BINARY $$STRIPPED_JAR $$JAR > $$MAIN_DEX_LIST",
+ "exit $$?",
+ "",
+ "EOF\n"]),
)
sh_binary(
@@ -126,6 +125,30 @@ java_import(
jars = [":dx_jar"],
)
+genrule(
+ name = "apkbuilder_source",
+ srcs = [],
+ outs = ["apkbuilder_binary.sh"],
+ cmd = "\n".join(["cat > $@ << 'EOF'",
+ "#!/bin/bash -e",
+ "BINARY=$${0##*-out/host/bin/}",
+ "DIRNAME=$$(dirname $$BINARY)",
+ "APKBUILDER=$${0}.runfiles/$${DIRNAME}/apkbuilder",
+ "if [[ \"$$KEYSTORE\" != \"\" ]]; then",
+ " mkdir -p /tmp/keystore/.android",
+ " cp $$KEYSTORE /tmp/keystore/.android/debug.keystore",
+ " export ANDROID_SDK_HOME=/tmp/keystore",
+ "fi",
+ "exec $$APKBUILDER $$*",
+ "EOF"]),
+)
+
+sh_binary(
+ name = "apkbuilder_binary",
+ srcs = ["apkbuilder_binary.sh"],
+ data = [":apkbuilder"],
+)
+
java_binary(
name = "apkbuilder",
runtime_deps = [":sdklib"],