From bd210f0038b692e686caa0e140fb0681eccdc010 Mon Sep 17 00:00:00 2001 From: Alex Humesky Date: Mon, 11 Jan 2016 23:08:58 +0000 Subject: Simplifies passing the debug key to ApkBuilder. -- MOS_MIGRATED_REVID=111892954 --- .../bazel/rules/android/BazelAndroidSemantics.java | 19 ++--------------- .../android/android_sdk_repository_template.txt | 24 +--------------------- .../build/lib/rules/android/AndroidBinary.java | 8 +++++++- .../build/lib/rules/android/AndroidSemantics.java | 9 +++----- 4 files changed, 13 insertions(+), 47 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib') 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 07473b5a25..d1c03fb9c9 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,12 +14,10 @@ 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; import com.google.devtools.build.lib.rules.android.AndroidCommon; import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider; import com.google.devtools.build.lib.rules.android.AndroidSemantics; @@ -82,21 +80,8 @@ public class BazelAndroidSemantics implements AndroidSemantics { } @Override - public void addSigningArguments( - RuleContext ruleContext, boolean sign, SpawnAction.Builder actionBuilder) { - // ApkBuilder reads the signing key from the debug.keystore file, thus, we are at its mercy - // for hermeticity. It turns out, it's not easy to coax ApkBuilder to read this key from a - // 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) { - Artifact debugKeyStore = ruleContext.getPrerequisiteArtifact("$debug_keystore", Mode.HOST); - actionBuilder - .addInput(debugKeyStore) - .setEnvironment(ImmutableMap.of("KEYSTORE", debugKeyStore.getExecPath().getPathString())); - } else { - actionBuilder.addArgument("-u"); - } + public Artifact getApkDebugSigningKey(RuleContext ruleContext) { + return ruleContext.getPrerequisiteArtifact("$debug_keystore", Mode.HOST); } @Override 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 df3d27b3ff..7c5d4684cf 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 @@ -117,7 +117,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_wrapper", + apkbuilder = "@bazel_tools//third_party/java/apkbuilder:embedded_apkbuilder", zipalign = ":zipalign_binary", android_jack = ":empty", jack = ":fail", @@ -222,28 +222,6 @@ java_import( jars = [":dx_jar"], ) -genrule( - name = "gen_apkbuilder_wrapper_source", - srcs = [], - outs = ["apkbuilder_wrapper.sh"], - cmd = "\n".join(["cat > $@ << 'EOF'", - "#!/bin/bash -eu", - "APKBUILDER=$${0}.runfiles/external/bazel_tools/third_party/java/apkbuilder/embedded_apkbuilder", - "if [[ -n \"$${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_wrapper", - srcs = ["apkbuilder_wrapper.sh"], - data = ["@bazel_tools//third_party/java/apkbuilder:embedded_apkbuilder"], -) - GOOGLE_PLAY_SERVICES_DIR = "extras/google/google_play_services/libproject/google-play-services_lib" java_import( diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 64b078d200..de84cec192 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -1175,7 +1175,13 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { .addInput(javaResourceFile); } - semantics.addSigningArguments(ruleContext, sign, actionBuilder); + if (sign) { + Artifact signingKey = semantics.getApkDebugSigningKey(ruleContext); + actionBuilder.addArgument("-ks").addArgument(signingKey.getExecPathString()); + actionBuilder.addInput(signingKey); + } else { + actionBuilder.addArgument("-u"); + } actionBuilder .addArgument("-z") diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java index e11c46038c..72f178e2fa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java @@ -18,7 +18,6 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.OutputGroupProvider; 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; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts; import com.google.devtools.build.lib.rules.java.JavaSemantics; @@ -90,12 +89,10 @@ public interface AndroidSemantics { ImmutableList getDxJvmArguments(); /** - * Adds command line arguments and inputs to a {@code ApkBuilder} invocation to control how to - * sign the app. + * Returns the artifact for the debug key for signing the APK. */ - void addSigningArguments( - RuleContext ruleContext, boolean sign, SpawnAction.Builder actionBuilder); - + Artifact getApkDebugSigningKey(RuleContext ruleContext); + /** * Add coverage instrumentation to the Java compilation of an Android binary. * @throws InterruptedException -- cgit v1.2.3