使用来自外部源的 apk 包更新 android 个应用

Update android app with apk package from external source

我们正在开发一个 Android 应用程序,我通过网站为我们的试点用户提供了一个 apk。用户已启用从未知来源安装设置。该应用已安装并运行良好。

现在我上传了更新版本的应用程序。我们更改了 apk 包上的版本号,新版本需要来自 phone 的更多权限,例如防止 phone 在第一个版本仅需要完全网络访问权限时休眠。

当我下载并打开新版本时,它显示 "Do you want to install an update to this existing application... Then updated application will get access to:" 然后在“新建”选项卡下列出添加的权限,在“全部”下列出所有权限。

所以安装程序识别出这是一个更新,以及在附加权限方面发生了什么变化。

当我继续安装时,安装停止并显示消息 "An existing package by the same name with a conflicting signature is already installed"。

我必须do/change做什么才能升级现有的应用程序?

所有 android apk 都使用密钥签名。甚至调试构建。对于调试版本,您的 IDE 会自动为您生成一个密钥。您不能为使用另一个密钥签名的包更新使用一个密钥签名的包。他们必须使用相同的密钥。如果您分发的调试版本不是在同一台机器上制作的,则可能使用了两个密钥。

现在解决此问题的唯一方法是将它们卸载并重新安装。然后制定一些关于使用什么密钥的内部政策。为了防止在我的工作中出现这种情况,我们都使用相同的调试密钥(我们有一个单独的发布密钥,所以我们不会不小心上传调试版本)。

旧应用程序有签名 A,但新应用程序有签名 B。

通常,您可能会使用调试密钥库创建应用程序。如果真是这样,那就不是什么好事了。不过因为是"unknown source"所以不是很重要

其次,您可能在另一台计算机上创建新版本而不是旧版本,这意味着使用了不同的调试密钥库。

密钥库用于检查生产者是否在应用程序的两次更新之间没有改变。这是一种安全保护。

根据你的具体情况,我建议你获取旧版本使用的调试密钥库,并在编译新版本时使用它。

调试密钥库位于计算机用户目录(可能是隐藏文件夹)的 .android 目录中。

请注意,特定的调试密钥库只能使用 365 天,从创建密钥库时开始计算。

如果您想避免此问题,请使用发布签名密钥。 https://developer.android.com/studio/publish/app-signing.html