我认为很多开发者都在尝试了解更多有关Google I/O 2017上展示的新版Google Play App Signing功能的信息.
存储密钥库以在Google Play内部对应用进行签名的功能可以节省您安全存储密钥库的工作量,并可以帮助系统根据硬件和操作系统特性优化为每个设备提供的APK.
您可以在官方文档中阅读有关此主题的更多信息:https://developer.android.com/studio/publish/app-signing.html#google-play-app-signing.
通过以下答案,我将更好地解释您上传原始密钥库所需遵循的步骤以及如何创建新的上传密钥库,从此点开始您需要签署APK.
我正在尝试了解如何在使用Google Play App Signing时将应用上传到Google Play.
这是我做的:
它抱怨证书不是证书
将新APK上传到制作
上传失败您上传了未使用上传证书签名的APK.您必须使用相同的证书.上传证书有指纹:[SHA1:0C:...],用于签署您上传的APK的证书有指纹:[SHA1:2D:...]
搜索了一会儿之后.我找到了如何将认证发布到我的密钥库中的Google Play控制台上.像这样的东西:
keytool.exe -importcert -file upload.pem -keystore myapp-release-key.keystore
证书似乎在.当我列出密钥库的内容时,这是我得到的:
keytool.exe -list -keystore trackcoachfull-release-key.keystore输入密钥库密码:
密钥库类型:JKS密钥库提供商:SUN
您的密钥库包含2个条目
myappfull,2017年5月18日,PrivateKeyEntry,证书指纹(SHA1):2D:... uploadkey,2017年5月19日,trustedCertEntry,证书指纹(SHA1):0C:...
现在,我被封锁的地方......
在Android Studio中,我尝试使用uploadkey生成已签名的APK.
构建>生成签名APK选择上面的密钥库输入密钥库密码选择uploadkey作为密钥别名我强制输入密钥密码.
Android Studio中出错:
错误:任务':app:packageFullRelease'的执行失败.
com.android.ide.common.signing.KeytoolException:无法从商店"C:\ Users\Admin\AndroidStudioProjects\keystores\myappfull-release-key.keystore"读取密钥uploadkey:受信任的证书条目未受密码保护
我的问题是:
如何生成使用Google Play提供的上传密钥签名的APK?
谢谢
作为这个问题的后续行动,我试图弄清楚是什么阻止了谷歌修改我们签名和分发的应用程序。无论我们分发 APK 还是 App Bundle,App Signing 服务都会剥离我们拥有的任何签名,而 Google 会对它分发的 APK 进行签名。在 App Bundle 的情况下,这将产生多个 APK,类似于bundletool生成的。
但由于 APK 只是一个带有编译代码和资源的 ZIP 存档,似乎谷歌可以在签名之前按照他们认为合适的方式修改它,包括添加或替换代码。
我们不会在您不知情和未批准的情况下修改和分发您的应用程序代码
和:
如前所述,Play 不会在您不知情和批准的情况下修改您的应用程序的功能。
值得注意的是,谷歌使用了“不要”和“不会”……而不是“不能”和“不能”。事实上,在同一篇文章中,我们看到:
对于作为应用程序包上传的应用程序,我们将通过引入所谓的源标记来提高这种安全性。此源元数据由 插入到应用程序的清单中
bundletool。
因此,我们知道至少一种修改,尽管是元数据。
此外, Android 版 Amazon AppStore 在重新签署 APK 之前会修改它们:
无论您是否选择应用 Amazon DRM,Amazon 都会使用代码包装您的应用程序,使该应用程序能够与 Amazon Appstore 客户端通信以收集分析、评估和执行计划策略,并与您共享汇总信息。您的应用程序在启动时将始终与 Amazon Appstore 客户端通信,即使您选择不应用 DRM。
亚马逊删除您的签名并使用您独有的亚马逊签名重新签署您的应用程序,该签名不会更改,并且对于您账户中的所有应用程序都是相同的。
十年来,亚马逊一直在做这种事情。
似乎谷歌应该拥有与亚马逊相同的技术能力。
那么,是否有任何我遗漏的东西会阻止 Google 添加或修改它重新签名和分发的 APK 中的代码?
我目前正在努力使用上传密钥,这是签署APK以将其发布到Google Play的新方法.
我做了什么
Google Play App Signing然后我从上传对话框中收到以下错误消息.
上传失败您上传了一个使用密钥签名的APK,该密钥也用于对发送给用户的APK进行签名.由于您已注册App Signing,因此您应在上传之前使用新密钥对其进行签名.
有什么问题
我没有找到任何上传upload key或如何生成这样的东西.上传密钥是否等于密钥库文件?
我试图做的
然后我在这里看了app签名的文档.但我不明白如何创建此上传密钥并将其发送给Google.
谁能帮我?
如何从Play Play商店和新应用上已上传的所有应用中禁用Google Play控制台的应用签名?
我刚刚注册了 Google Play App Signing 计划,该计划需要上传发布密钥库的加密版本,并且有一个“可选”步骤来创建上传密钥库 - 可选用引号引起来,因为我认为这应该是一个必需步骤,但无论如何,在成功注册后,我现在留下了一个上传证书,我应该以某种方式使用它来签署我未来的应用程序版本。
到目前为止我所做的:我从 Android Studio 创建了一个新的密钥库,设置了存储和别名密码,并尝试将upload_cert.der导入现有别名 - 失败:
keytool -importcert -file upload_cert.der -alias upload -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)
keytool 错误:java.lang.Exception:回复中的公钥与密钥库不匹配
我还尝试在不指定别名(或删除现有别名并创建新别名)或使用不同别名的情况下导入上传证书:
keytool -importcert -file upload_cert.der -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)
...也失败了:最终创建了一个名为mykey的新别名,该别名不受密码保护并且失败并显示消息:
引起:java.lang.RuntimeException:com.android.ide.common.signing.KeytoolException:无法从存储“/path/to/upload-keystore.jks”读取密钥上传:受信任的证书条目不受密码保护
...所以很自然地,我尝试为别名设置密码:
keytool -keypasswd -alias upload -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)
失败以及消息:
keytool 错误:java.lang.Exception:Alias 没有密钥
......现在我已经没有想法了。
与此同时,我已向 Google Play 支持人员发送了一个问题/请求以更新我的上传密钥,但是,我希望有一种解决方案(支持人员回复有点慢),因为文档没有t 以任何方式暗示需要生成上传密钥库并上传该密钥库的加密私钥。因此,要么文档含糊不清/不清楚/错误,要么有一种方法可以使用生成的upload_cert.der。有什么想法吗?
编辑:
感谢Pierre提供的回答和评论,我意识到如果您不创建/提供上传密钥,则应使用您现有的原始签名密钥和upload_cert.der。因此,唯一的要求是通过运行插入上传证书:
keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks
Run Code Online (Sandbox Code Playgroud)
...您应该能够继续将您的应用程序发布到 Play 商店。
我正在尝试创建应用程序链接,但应用程序链接助手在生成 assetlinks.json 时不断在步骤 3(关联网站)中抛出以下错误。
尝试获取密钥库文件的 sha-256 指纹时发生错误。请确保您的密钥库文件正确。
我已经尝试了这两个选项,但出现了相同的错误:
我错过了什么吗?我在 Android Studio Arctic Fox | 2020.3.1 Patch 3 有没有办法在不使用App links Assistant的情况下创建JSON文件?
我正在阅读一些 Android 11 更新文档,显然需要实施 APK 签名方案 v2。AAB 格式已经这样做了吗?
android apk android-studio android-app-signing android-app-bundle
我想将我的应用程序上传到华为应用程序库。我被困在应用程序签名过程中。
要执行应用签名,您需要选择以下两个选项之一:
不幸的是,华为应用程序库中的说明告诉您Obtain the pepk.jar file from the Internet or another legitimate source.但没有提供可以下载 PEPK 工具 (pepk.jar) 的链接。
在哪里可以找到下载该工具的“合法渠道”?
编辑:华为应用程序库说明供参考
java -jar pepk.jar --keystore test.jks --alias test --output=output.zip --encryptionkey=<some-encryption-key> --include-cert
Run Code Online (Sandbox Code Playgroud)
第二个编辑:Google播放PEPK
在谷歌播放应用程序签名时,他们提供了一个链接:
Pepk工具和Pepk工具源代码。
我正在尝试创建一个 Playstore 版本。
我已按照指南创建上传密钥和密钥库,一字不差: https: //developer.android.com/studio/publish/app-signing#generate-key
然后,我使用上传密钥生成了我的应用程序的签名应用程序包,如下所示:https: //developer.android.com/studio/publish/app-signing#sign_release
这导致了一个名为:app-release.aab
现在,由于此应用程序是全新的,并且以前从未发布过,因此无需导出加密密钥并“选择将现有应用程序加入 Play 应用程序签名”,因为我在创建新应用程序时已经选择了此选项当然,我之前从未上传过使用此应用程序列表的另一个密钥签名的 APK。
接下来,我转到 Play 控制台并创建一个新的生产版本。但是,当我上传app-release.aab文件时,我看到以下错误消息:
"The Android App Bundle was not signed."
这完全令人困惑。
据我所知,我已严格按照说明进行操作,并且我尝试在谷歌上进行一些研究,但没有找到答案。
有这个过程经验的人可以帮助我吗?
编辑:
我对整个过程不了解的是,我被要求在本地生成上传密钥,但实际上从未将密钥上传到 google play 控制台 - Google 到底如何知道该应用程序是使用上传密钥签名的,如果他们从未见过上传密钥?但是,生成上传密钥的文档中没有任何地方指出我应该使用本地生成的密钥执行任何操作,而不是使用它在本地生成签名的应用程序包,这正是我所做的。
编辑2:
以下屏幕截图显示了我创建上传密钥并使用上传密钥生成应用程序签名包的过程:
keytool -printcert -jarfile app-release.aab然后,相当奇怪的是,从捆绑包所在的目录运行的结果:
android ×9
google-play ×6
apk ×2
app-signing ×1
applinks ×1
keystore ×1
keytool ×1
sign ×1
signing ×1