如何在本地创建签名与我在 Playstore 上的应用兼容的 APK(使用 Google 的应用签名)?
Posted
技术标签:
【中文标题】如何在本地创建签名与我在 Playstore 上的应用兼容的 APK(使用 Google 的应用签名)?【英文标题】:How can I create my APK locally which has signature compatible with my app on Playstore (which uses Google's app signing)? 【发布时间】:2019-05-18 04:28:31 【问题描述】:我为我的应用启用了 Google 应用签名。 我创建了一个 APK 并使用我的密钥库文件对其进行签名并将其上传到 devConsole。然后,Google 使用 Google 的应用签名再次对 APK 进行签名,然后将其发送给 Playstore 上的用户。
-
我从 Playstore 下载并安装了 APK(其中包含 Google 的应用签名签名)。
我从 devConsole 下载了应用签名证书 -> 应用签名 -> 应用签名证书
我使用以下命令将证书添加到我当前的密钥库文件中:
keytool -importcert -file [app_signing_certificate] -keystore [current_keystore_file]
-
我使用步骤 3 中生成的新密钥库创建了发布 APK
现在,当我尝试将这个新 APK 升级到从 Playstore 安装的 APK 上时,出现错误。
失败 [INSTALL_FAILED_UPDATE_INCOMPATIBLE: 包 xyz 签名与以前安装的不匹配 版本;无视!]
我想知道需要做什么才能在本地创建一个与从 Playstore 下载的签名匹配的 APK。
【问题讨论】:
【参考方案1】:你做不到。对于 Google Play 应用签名,只有 Google 可以为 APK 签名。
正如the help pages 所说:
证书:证书包含公钥以及一些关于谁拥有该密钥的额外标识信息。
您从 Google 获得的应用签名证书只是可用于验证签名的公钥信息。它不允许您签署应用程序。当您将其添加到您的密钥库时,您就可以进行验证。
这并不意味着你被卡住了。为什么需要自己签名?
如果只是为了使用服务器端 API,那么大多数 API 会允许您添加多个签名,并且您可以使用您的开发密钥以及授权的 Google 密钥 如果是这样,您可以在开发过程中快速迭代,这可以使用 Google Play Internal Test tracks 完成,这样您就可以非常快速地将内部测试版本发送给开发人员或 QA。【讨论】:
感谢您的详细回复。 @Nick Fortescue 考虑一个用户在我们的 2 路签名构建(从 Playstore 安装)上的场景。用户面临一些需要在该设备上进行代码级调试的问题。所以我们必须让用户调试构建(但不卸载以前的构建)一种方法是使用“debuggable true”在本地创建构建。但是根据您的上述回答,我们无法在本地创建具有相同签名的 APK。另一种方法是从 Playstore 下载派生的 APK,但 Playstore 不允许上传调试版本。在这种情况下我们能做什么? 是的,这很棘手。从根本上说,Google play 不想让用户调试 APK,因为这会使他们处于危险之中。我可以看到两个选项:1)通过日志语句进行调试,并让用户进入内部测试轨道。 2)如果太严重需要调试,备份用户本地存储,卸载播放版本,重新安装可调试版本。两者都不理想,但您几乎不应该处于需要向生产用户提供可调试 APK 的情况。【参考方案2】:您需要 Google 提供的实际签名密钥。我不认为你能得到,所以你不能。
【讨论】:
正确。将 Google Play 应用签名与不同的上传密钥库一起使用的目标之一是不在您的计算机上放置密钥库。对于本地开发,您应该使用调试密钥进行测试。当您想测试某个版本时,可以使用 Play 管理中心中的测试轨道。 @Gabe Sechan 当我将“应用程序签名证书”(我从 devConsole -> 应用程序签名获得)添加到我的密钥库文件时,这并不等同于 Google 的实际签名?两者有什么区别?以上是关于如何在本地创建签名与我在 Playstore 上的应用兼容的 APK(使用 Google 的应用签名)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 `pip search` 与我的本地 pypi 服务器一起工作?
谷歌登录不适用于 Play Store 上的生产 apk。(在 Playstore 上发布 apk)