从外部源用apk包更新android应用程序

从外部源用apk包更新android应用程序,android,apk,updates,Android,Apk,Updates,我们正在开发一个Android应用程序,我通过一个网站为我们的试点用户提供了一个apk。用户已启用“从未知源安装”设置。该应用程序已安装并运行良好 现在我上传了一个新版本的应用程序。我们已经更改了apk软件包上的版本号,新版本需要手机的更多权限,比如在第一个版本只需要完全网络访问时防止手机睡眠 当我下载并打开新版本时,它会显示“是否要安装此现有应用程序的更新…然后更新的应用程序将获得访问权限:”然后在新选项卡下列出添加的权限,并在“所有”下列出所有权限 因此,安装会确定这是一个更新,以及在附加权

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

现在我上传了一个新版本的应用程序。我们已经更改了apk软件包上的版本号,新版本需要手机的更多权限,比如在第一个版本只需要完全网络访问时防止手机睡眠

当我下载并打开新版本时,它会显示“是否要安装此现有应用程序的更新…然后更新的应用程序将获得访问权限:”然后在新选项卡下列出添加的权限,并在“所有”下列出所有权限

因此,安装会确定这是一个更新,以及在附加权限方面发生了哪些更改

当我继续安装时,安装将停止,并显示消息“已安装具有冲突签名的同名现有包”


要升级现有应用程序,我必须做什么/做什么更改?

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


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

旧应用程序有一个签名a,而新应用程序有一个签名B

通常,您可以使用调试密钥库创建应用程序。如果是这样,那就不是一件好事。但由于它是一个“未知的来源”,它不是很重要

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

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

在您的特定情况下,我建议您获取用于旧版本的调试密钥库,并在编译新版本时使用相同的密钥库

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

请注意,从创建密钥库开始,特定的调试密钥库仅在365天内可用

如果要避免此问题,请使用释放签名密钥。

您是否为更新的apk创建了新密钥库?请确保在创建apk时使用了相同的生产密钥库。这可能是由于您的门户网站,您正试图这样做。在Playstore中,这不会发生,期望密钥库是相同的。