0

我知道这里有很多关于这个的问题,但我已经尝试了一切(但显然是正确的“事情”!)而且似乎没有任何迹象表明我遇到的问题。

我编写了一个应用程序(为客户),旨在托管在他们自己的服务器上。该应用程序引用了一个包含最新版本代码的简单文本文件,并根据自己的版本对其进行检查。如果它已过期,它会关闭并下载更新。到目前为止,一切都按预期工作。

我用:

Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(outputFile), "application/vnd.android.package-archive");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

...开始安装新下载的 .apk 文件的代码。这一切都如我所料开始。

我点击“安装”——当系统提示我确认用新的应用程序覆盖当前应用程序时。它启动,然后显示:

App not installed. And existing package by the same name with a conflicting signature is already installed.

现在我知道 Android 不能有多个应用程序共享相同的包名称,这很好,但 LogCat 中什么也没有出现,我只能假设操作系统对我试图“更新”我的应用程序感到恼火,甚至虽然我正在通过所有正确的渠道并使用内置的包管理器为我做这件事!

谁能告诉我操作系统在抱怨什么?我不是试图并排安装两个应用程序,我希望它更新它,它开始这样做,然后变得非常困惑。

是否与我使用相同的密钥库对包进行签名有关?我非常怀疑它,因为我以前使用相同的密钥库来处理游戏等的更新,但我就是不知道它在抱怨什么。

希望那里有人遇到过这个问题并解决了它,并且可以为我指明正确的方向。我对它给我的有限信息有点盲目:(

干杯。

4

1 回答 1

3

您已经使用不同的签名密钥构建了新旧版本;可能您要么在不同的机器上构建它们,要么一个是调试证书,另一个是发布证书。发生这种情况时,您通常必须手动明确删除旧版本,然后再安装具有不同证书的新版本 - 这基本上是一种安全措施,可防止无意中安装木马化的冒名顶替者更新。

请注意,您可以在构建机器之间移动证书(如果您将代码库交给客户,则可能必须这样做),但在这样做时您需要小心。

于 2013-10-29T15:52:07.897 回答