使用 Runtime.getRuntime().exec 从系统应用程序通过“pm install...”安装 apk 的 Android 7+ 问题

问题描述

我将 apk 安装到我的 Android 7.1.1 模拟器中的 /system/priv-app 文件夹中,因此它可以作为特权系统应用程序运行,但是当我尝试使用我的应用程序代码安装 apk 时

val runtime = Runtime.getRuntime()
val process = runtime.exec("pm install -r -f $apkFilePath")
process.waitFor()
val output = process.inputStream.bufferedReader().use { it.readText() }
val error = process.errorStream.bufferedReader().use { it.readText() }

error 输出中我得到

错误java.lang.SecurityException:权限拒绝: runInstallCreate from pm 命令要求以用户 -1 身份运行,但正在调用 来自用户 0;这需要 android.permission.INteraCT_ACROSS_USERS_FULL

我尝试在清单文件添加权限

  <uses-permission
        android:name="android.permission.INteraCT_ACROSS_USERS_FULL"
        android:protectionLevel="signatureOrSystem"
        tools:ignore="ProtectedPermissions"
        />

但还是出现同样的错误。我什至试过

runtime.exec("pm install -r -f --user -1 $apkFilePath")

还是报同样的错误

试试这个代码有什么有趣的

runtime.exec("pm install -r -f --user 0 $apkFilePath")

那么 error输出会变成 NullPointerException

那么为什么 INteraCT_ACROSS_USERS_FULL 权限不起作用而 --user -1 也不起作用?我以为系统权限应用可以静安装apk,那么问题出在哪里?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)