【问题标题】:Silent install apk programmatically by system app (without root)通过系统应用程序以编程方式静默安装 apk(无 root)
【发布时间】:2013-03-25 16:17:54
【问题描述】:

我有 android:sharedUserId="android.uid.system" (UID: 1000) 的系统级应用程序。

设备没有root!清单中包含 INSTALL_PACKAGES 权限。

我可以静默安装下载的 *.apk 吗?

【问题讨论】:

  • 为什么要在用户不知情的情况下安装东西?
  • 我想这个问题已经在这里讨论过了:stackoverflow.com/questions/4604239/…
  • 我需要它来让我的主应用安装和更新子应用。
  • 我不需要任何通知给用户。
  • 回复:为什么? Android 设备不仅限于手机。考虑用户默许“正常工作”(即自动更新)的媒体设备或其他网络设备。

标签: android android-install-apk


【解决方案1】:

我已经找到问题了。

  1. 添加了“android.permission.INSTALL_PACKAGES”权限。
  2. 我使用“signapk.jar”和我从设备制造商那里获得的证书签署了我的应用程序。
  3. 现在这个应用程序可以使用“pm install /.../app.apk”而不用“su”来安装其他应用程序。

有效!

附: 更新应用程序仅使用“pm install”不会用新应用程序替换现有应用程序,而是返回exit_value = 0。所以更新有两种方法:

  • 使用“pm install -r /.../app.apk”;
  • 首先使用“pm uninstall com.mydomain.myapp”删除应用(需要“android.permission.DELETE_PACKAGES”权限),然后安装新的。

【讨论】:

  • 如何自我升级?我有一个具有自动更新功能的 apk。但是它放在/system/app,现在只有pm install好像不行。
  • @3c71,这个更新命令会根据版本更新APK吗? (我的意思是只有当我们使用更新的版本更新时才会进行更新?)
  • 实际上不确定。我期待 -r 用任何 APK 替换现有的应用程序,无论是相同的版本,新的还是旧的。虽然 pm install 只会在版本更新时替换,而不是相同。
  • @yuralife 我不确定你能在没有root的情况下安装apk吗?
  • 拥有制造商证书的魅力!谢谢!!
【解决方案2】:

不,你不能。仅仅拥有相同的 UID 是不够的。您还必须使用与 ROM 本身相同的密钥进行签名。

出于安全原因,不允许静默安装应用或更新您自己的应用。

【讨论】:

  • 但是我的应用程序是用我从制造商那里获得的证书签名的。此应用只能在一种类型和型号的设备上运行。
  • @yuralife 在这种情况下,制造商应该将您的应用程序构建到系统映像中,以便与其他预安装的应用程序自动更新。
  • 好的,但是这个内置的主应用程序应该可以在没有用户确认的情况下安装简单的应用程序。而且我不知道如何实现这个?
  • @yuralife 你不需要。这是制造商的责任。您的应用将以与 Gmail 等相同的方式更新。
  • 但是我需要控制这个更新,它不是一个市场应用程序。例如,在更新之前,我需要检查它是否未被用户使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 2015-07-22
相关资源
最近更新 更多