如何在bazel中构建带有签名的发布apk
我在bazel的文档中找不到任何关于如何在bazel中构建带有签名的发布apk,bazel,Bazel,我在bazel的文档中找不到任何关于keystore的规则,或者在android\u binary的参数中找不到任何关于签名的参数。那么,我如何构建一个带有签名的发布apk呢?这个问题是在上提出的,它还包含一个解决方案和一些背景。这个问题是在上提出的,它还包含一个解决方案和一些背景。目前,Bazel不支持对apk进行签名。 正如我们在文件中看到的: android\u binary创建一个name\u unsigned.apk:上述文件的一个未签名版本,可以在向公众发布之前使用发行密钥进行签名
keystore
的规则,或者在android\u binary
的参数中找不到任何关于签名的参数。那么,我如何构建一个带有签名的发布apk呢?这个问题是在上提出的,它还包含一个解决方案和一些背景。这个问题是在上提出的,它还包含一个解决方案和一些背景。目前,Bazel不支持对apk进行签名。
正如我们在文件中看到的:
android\u binary
创建一个name\u unsigned.apk
:上述文件的一个未签名版本,可以在向公众发布之前使用发行密钥进行签名
这意味着您应该使用其他工具对此未签名的apk进行签名。看看Android文档。目前,Bazel不支持签署apk。 正如我们在文件中看到的:
android\u binary
创建一个name\u unsigned.apk
:上述文件的一个未签名版本,可以在向公众发布之前使用发行密钥进行签名
这意味着您应该使用其他工具对此未签名的apk进行签名。看看Android文档。我没有足够的声誉来评论斯特伦的答案,但答案的第一部分是不正确的。Bazel确实支持签署APK。事实上,android_二进制文件的每一次构建都会产生一个签名的APK,不过它是用硬编码的调试密钥签名的
Bazel故意不为用户提供指定密钥的机制,因为不应使用Bazel使用释放密钥进行签名。这将要求您的发布密钥在您的工作区中,因此可能会被签入源代码管理。那将是非常糟糕的做法。我没有足够的声誉来评论斯特伦的答案,但答案的第一部分是不正确的。Bazel确实支持签署APK。事实上,android_二进制文件的每一次构建都会产生一个签名的APK,不过它是用硬编码的调试密钥签名的
Bazel故意不为用户提供指定密钥的机制,因为不应使用Bazel使用释放密钥进行签名。这将要求您的发布密钥在您的工作区中,因此可能会被签入源代码管理。那将是非常糟糕的做法。我戴了一个快速的genrule,可以帮你签名。但是,需要注意的是,您将无法在输出签名的APK上使用
mobile install
,这是非常不幸的(仍在寻找解决方法)
我穿了一条可以帮你签名的快速规则。但是,需要注意的是,您将无法在输出签名的APK上使用
mobile install
,这是非常不幸的(仍在寻找解决方法)
了解了!非常感谢你!了解了!非常感谢你!是的,你是对的,将发布密钥签入存储库不是一个好做法。是的,你是对的,将发布密钥签入存储库不是一个好做法。
def signed_android_binray(
name,
android_binary,
keystore,
alias,
password):
"""
This macro signs given android_binary with the given keystore
Example usage:
load("//bzl:apksigner.bzl","signed_android_binray")
signed_android_binray(
name = "signed-foo-app",
android_binary = ":foo-app",
keystore = "//path/to/keystore:my-keystore",
alias = mykeystore,
pass = foo123,
)
"""
unsigned_android_binary = android_binary + "_unsigned.apk"
output_name = "{}_signed.apk".format(name)
native.genrule(
name = name,
srcs = [
unsigned_android_binary,
keystore,
],
tools = [
"@androidsdk//:apksigner",
],
outs = [
output_name,
],
cmd = """
$(location @androidsdk//:apksigner) sign \
--ks $(location {}) \
--ks-key-alias {} \
--ks-pass pass:{} \
--v1-signing-enabled true \
--v1-signer-name CERT \
--v2-signing-enabled true \
--out $(location {}) \
$(location {})
""".format(keystore, alias, password output_name, unsigned_android_binary),
)