使用pm命令安装APK

时间:2014-08-21 10:04:08

标签: android command

我尝试使用以下代码更新APK:

Process process;
process = Runtime.getRuntime().exec(new String[] {"su", "-c", "pm install -r -d"+MyApk.apk});

但它不起作用。

当我将其与adb一起使用时,这很有效:

adb shell su -c pm install -r -d /system/app/Community-debug.apk

如果要像使用intent方法一样请求用户权限,它也可以正常工作。

2 个答案:

答案 0 :(得分:4)

您的解决方案仅适用于有根设备。

为了让它在所有设备上运行,首先,您需要设备制造商的合作才能将您的应用程序置于/ system / priv-app下。将apk放在那里将为您提供系统权限,使您能够执行安装。 最重要的是,您需要将android.permission.INSTALL_PACKAGES添加到清单文件中。 最后,将这些行添加到您的代码中:

Runtime.getRuntime().exec("chmod 777 " + MyApk.apk);
Process process = Runtime.getRuntime().exec("pm install -r " + MyApk.apk);

答案 1 :(得分:3)

您的应用程序需要以System用户身份运行才能访问此级别的命令。如果您的应用使用标准渠道进行分发,则无法以任何方式完成,例如: Google Play,从SD卡安装或由ADB安装。这些都不会让您的应用程序破坏安全性。

话虽如此, 是一种让它正常工作的方式,但这种方式仅适用于特权分发。您的应用必须:

  • 在AndroidManifest中包含android:sharedUserId="android.uid.system"
  • 使用用于签署系统其余部分的证书进行签名
  • 预先安装在其中一个特权位置:/system/app/system/priv-app

一旦您的应用满足这些要求,它就可以执行pm install等命令,即使没有su

毋庸置疑,此类选项仅适用于销售自有品牌设备的电信提供商等大型机构。