微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。