android - 如何自动更新应用程序;安卓

标签 android android-intent installation

我正在构建一个启动器应用程序,我想通过无线方式更新它。我创建了一个服务类,可以成功检查和比较应用程序版本号,以确定是否需要更新。如果比较的 apk 版本高于当前版本,我会从我的云服务器下载 apk,然后弹出一个对话框来安装它。

我面临的冲突是更新无法安装。我收到错误“已安装具有冲突签名的同名现有软件包”。我开始怀疑我的方法是否正确。我该如何解决这个问题?这就是我正在做的事情。

确认更新后,我会显示一个对话框,按下确认按钮后,我会使用 Intent 来解析应用程序 URL

Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setData(Uri.parse(appUrl));
startActivity(i);
finish();

这实际上发布了一条通知,我必须单击并按安装按钮。一旦我这样做了,它会尝试安装,但随后会出现签名冲突的错误。

理想情况下,我只想安装它而不必看到通知。预先感谢您。

最佳答案

您不一定需要使用 Playstore 或任何其他应用托管服务来管理您的应用升级。您的用户应该启用:从未识别的来源安装(在他们的 Android 手机上)

对于自动升级,您必须发布具有相同签名的所有 APK。如果您只是从 Eclipse 构建并运行应用程序,则 DIST 文件夹中生成的 APK 文件将使用 Debug key (每台机器的默认 key )进行签名

现在,如果您从不同的计算机构建相同的代码,调试键值将会不同,并且您会收到错误:“安装新 APK 时已安装了具有相同名称且签名冲突的现有包”

以下是一些解决方案:

  1. 始终发布 APK 以从同一台计算机自动升级(这绝对不可能)
  2. 使用相同的签名对所有 APK 进行签名。在 Eclipse 中:右键单击项目 > Android 工具 > 导出签名的应用程序包

关于android - 如何自动更新应用程序;安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26836506/

相关文章:

installation - Cygwin 没有正确安装

java - 在 Android 应用程序上发出 POST 请求

java - java中基于参数的HTTP Get方法

eclipse-rcp - 从快捷方式运行时未创建文件夹

android - bundle.getString() 返回空值

android - 使用标志 FLAG_UPDATE_CURRENT 时,小部件 onclick 未决 Intent 不会触发

node.js - 为 Electron React JS 应用程序创建安装程序 - 安装后运行时不加载 reactJS 组件

android - 实现室内地图

android - 无法在未使用 AsyncTask 调用 Looper.prepare() 的线程内创建处理程序

ios - 相当于iOS上Android的 "send intent"