diff options
author | 2015-09-04 11:55:18 +0000 | |
---|---|---|
committer | 2015-09-04 12:52:48 +0000 | |
commit | 87374e6e75aeaf958881be4522063949ad557796 (patch) | |
tree | 343b597e0bc6cf3c16d2c3ca816d3ded7f90f928 /src/main/java/com/google/devtools/build | |
parent | 4baefdc226efc9d446c9f5d24a03b799e24e661e (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')
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"], |