我尝试使用以下代码更新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方法一样请求用户权限,它也可以正常工作。
答案 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安装。这些都不会让您的应用程序破坏安全性。
话虽如此, 是一种让它正常工作的方式,但这种方式仅适用于特权分发。您的应用必须:
android:sharedUserId="android.uid.system"
/system/app
,/system/priv-app
一旦您的应用满足这些要求,它就可以执行pm install
等命令,即使没有su
毋庸置疑,此类选项仅适用于销售自有品牌设备的电信提供商等大型机构。