【问题标题】:Can an Android app upgrade itself?Android 应用程序可以自行升级吗?
【发布时间】:2012-05-08 17:59:02
【问题描述】:

是否可以在 Android 中从自身更新应用程序?有问题的应用程序是系统应用程序,因此我可以执行特权命令。另请注意,我不想向用户显示任何通知,所以一切都应该在后台运行。

【问题讨论】:

  • 当然可以……您可以尝试按特定时间间隔进行轮询。或者您可以使用 C2DM(云到设备消息传递)。 C2DM 专门用于此目的。
  • 假设我在 sdcard 中有文件。我有兴趣更新部分而不是下载部分。
  • 您需要使用启用 r/w 的 root shell 命令,将 apk 文件复制到 /system/app/。然后切换回 r/o。
  • @Tim 可以通过 Android 应用程序实现吗?
  • @you786 技术上可以从应用程序中做到这一点。但是运行它的设备必须是root过的。而且由于大多数(所有)root 设备都安装了 SuperUser.apk,用户仍会收到通知,您的应用程序正在尝试使用超级用户命令,并且仍然可以选择禁止它发生。

标签: android system


【解决方案1】:

实际上,应用程序自行更新非常容易,难的是在不向用户提示的情况下进行更新。应用需要下载 APK,然后将其发送到 PackageManager API 进行安装。然后Android会提出安装提示。有一个库可以处理该部分:

至于提示,应用程序需要特权访问。如果设备已获得 root 权限,则应用程序可以请求 root 访问权限。该应用程序也可以作为“priv-app”刷新,以便它具有特权访问权限。或者你可以像 F-Droid 一样:将Privileged Extension 刷成“priv-app”,然后让你的应用向 Privileged Extension 发送安装/卸载请求。

否则,您需要下载二进制代码,并动态加载它,就像@yusuf-x 说的那样。请注意,Google 正在努力在每个新的 Android 版本中实现这一点。

【讨论】:

    【解决方案2】:

    使用 Java 类加载器动态加载被推送或下拉的代码。 – Yusuf X 刚刚编辑。我在 Android 上将其用于此目的。

    【讨论】:

    • 您能否更具体地说明如何实现这一目标?
    【解决方案3】:

    Fdroid 是一个开源应用程序存储库。 他们的客户端应用程序可以从 fdroid 存储库安装/更新/删除应用程序,包括它自己。

    在此处查看客户端应用程序的安装程序部分的代码: https://gitlab.com/fdroid/fdroidclient/tree/master/app/src/main/java/org/fdroid/fdroid/installer

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多