使用 pm 命令安装 APK

Sib*_*ibo 3 android command

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

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

但它不起作用。

当我将它与 adb 一起使用时,效果很好,如下所示:

adb shell su -c pm install -r -d /system/app/Community-debug.apk
Run Code Online (Sandbox Code Playgroud)

如果它必须请求用户许可才能像使用意图方法一样进行安装,它也可以正常工作。

小智 6

您的解决方案仅适用于已取得 root 权限的设备。

为了让它在所有设备上运行,首先需要设备制造商的配合,将您的应用程序放在/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);
Run Code Online (Sandbox Code Playgroud)


JBM*_*JBM 5

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

话虽如此,有一种方法可以让它工作,但这种方法仅适用于特权分发。您的应用程序必须:

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

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

不用说,此类选择仅适用于销售自有品牌设备的电信提供商等大型机构。