【问题标题】:Sliently install .apk programmatically以编程方式静默安装 .apk
【发布时间】:2014-04-09 17:16:56
【问题描述】:

好的,

我知道有很多类似的问题,但没有给我我正在寻找的答案。

我有一个自定义的根 ROM(没有 Play 商店)。这是一个 android 棒 pc(所以我没有系统密钥来签署我的应用程序,除非我错过了内核文档中的某些内容)。我希望我的应用每晚检查来自我的服务器的更新。如果有新版本,我希望它在没有用户交互的情况下下载和安装。

我知道我可以使用

触发更新屏幕
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(new File(pathToApk));
intent.setDataAndType(uri, "application/vnd.android.package-archive");
startActivity(intent);

但正如我所说,这不是我想要的。 SU 和busybox 在设备上。有人知道这样做的方法吗?

【问题讨论】:

  • 如果你编译了你的自定义rom,你应该有系统密钥。另外,如果我没记错的话,您需要使用 PackageManager 来安装应用程序。您需要开发一个私有 api 来安装您的应用程序,因为这并不是开箱即用的。
  • 这不是一个完全自定义的编译。由于我必须翻译大量阅读我和其他 doc 文件(因为我似乎遗漏了一些东西,因为它不会完全编译),所以我刚刚获取了原始系统映像并对其进行了修改(启动动画、build.props 等)。

标签: android apk android-install-apk


【解决方案1】:

您可以使用 pm 从命令行访问 PackageManager。如果存在su,则需要运行

su pm install pathToApk.apk

要从 Java 应用程序运行它,请使用 ProcessBuilder

【讨论】:

  • 我厌倦了这个,但它没有安装,也没有输出。这是我执行的代码。 pastebin.com/Bz1EiXQc
  • 您可能还需要阅读 stderr 以找出错误原因(在您的 pb 上致电 redirectErrorStream(true)
  • 另外,由于这是一个shell命令,你也可以尝试从adb shell运行它来测试它。
  • 我让它在 adb shell 中运行,但仍然无法通过代码运行。这是我完成的过程。 pastebin.com/8LXJ15is
  • 同一主题的几个答案:*.com/questions/14398543/…