我正在为媒体盒创建一个安卓应用程序。该框已root。我必须绕过权限(也是运行时权限),因为用户不会与设备交互。我试图将 apk 推送到 system/priv-app 文件夹中,使其成为系统应用程序。尽管如此,每当我的应用程序启动时,它都会请求权限。有什么办法可以绕过 root 设备的权限吗?我使用以下命令将 APK 推送到 priv-app 文件夹。
adb remount
adb push apk-filename-here /system/app/
adb shell chmod 644 /system/app/apk-filename-here
adb reboot
应用程序看起来像系统应用程序,因为它现在不可卸载。但是权限问题仍然存在。是否需要做任何额外的事情来授予所有权限?请帮忙。
我试过了 bypass android usb host permission confirmation dialog也是,但这现在似乎是一个非常古老的故事。
最佳答案
一些权限是签名级别的,这意味着除非您的应用使用与系统其余部分签名相同的 key 进行签名,否则无法授予它们。如果您需要这些中的任何一个,您几乎无能为力,除非相关 API 具有 shell 命令替代方案。
其他权限是特权级别的,这意味着它们只有在应用程序位于 /system/priv-app/
时才会被授予。您没有提到您正在使用哪些权限,但我建议您将您的应用放在 priv-app
而不是 app
中。如果此设备是 Lollipop 或更高版本,应用程序应该在 priv-app
中有一个子文件夹(例如 /system/priv-app/SomeApp/SomeApp.apk
)。
第三种类型是应用操作权限。这些不是运行时权限,但可以使用 shell 命令授予它们:
cmd appops set <PACKAGE> <OP> <MODE>
例如,授予SYSTEM_ALERT_WINDOW
权限:
cmd appops set com.some.package android:system_alert_window allow
第四种是运行时/开发权限。两者都可以授予以下条件:
pm grant <PACKAGE> <PERMISSION>
例如,授予WRITE_EXTERNAL_STORAGE
:
pm grant com.some.package android.permission.WRITE_EXTERNAL_STORAGE
可以查看平台查看自己的权限类型AndroidManifest.xml .找到您的权限并检查 protectionLevel
字段。
signature
表示签名privileged
表示特权development
表示开发危险
意味着运行时正常
权限将被自动授予
某些权限,如 WRITE_SECURE_SETTINGS
具有多个保护级别:signature|privileged|development
。
如果满足其中任何条件,Android 将授予您的应用程序权限。使用 WSS,您可以将应用程序放入 priv-app
或使用 pm grant
。无论哪种方式都可以让您访问。
如果一个权限的保护级别同时有appops
和development
,比如PACKAGE_USAGE_STATS
,就要小心了。使用 cmd appops
将授予某些功能的权限,而 pm grant
将授予其他功能。
关于android - 如何绕过 root 设备的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53047615/