我尝试使用以下代码更新 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)
您的应用程序需要以系统用户身份运行才能访问此级别的命令。如果您的应用程序是使用标准渠道(例如 Google Play)分发、从 SD 卡安装或通过 ADB 安装,则无法以任何方式完成此操作。这些都不会让您的应用程序破坏安全性。
话虽如此,有一种方法可以让它工作,但这种方法仅适用于特权分发。您的应用程序必须:
android:sharedUserId="android.uid.system"在 AndroidManifest 中/system/app,/system/priv-app一旦您的应用程序满足这些要求,它就可以执行类似的命令pm install,即使没有su
不用说,此类选择仅适用于销售自有品牌设备的电信提供商等大型机构。
| 归档时间: |
|
| 查看次数: |
28024 次 |
| 最近记录: |