如何在已经获取了Root权限的设备上绕过权限限制?

4

我正在制作一个媒体盒子的安卓应用程序。该盒子已经进行了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

这个应用看起来像是系统应用,因为现在无法卸载。但权限问题仍然存在。是否需要额外的操作来授予所有权限?请帮忙。

我也尝试过绕过Android USB主机权限确认对话框,但这似乎已经是一个非常老的故事了。

1个回答

7
一些权限是签名级别的,这意味着除非您的应用程序使用与系统其余部分相同的密钥进行签名,否则无法授予这些权限。如果您需要其中任何一个权限,则除非相关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表示开发
  • dangerous表示运行时
  • normal权限将自动授予
某些权限,如WRITE_SECURE_SETTINGS具有多个保护级别:signature|privileged|development
如果满足这些条件之一,Android将向您的应用程序授予该权限。对于WSS,您可以将应用程序放在priv-app中或使用pm grant。任何一种方式都可以让您获得访问权限。
如果权限的保护级别同时具有appopsdevelopment,例如PACKAGE_USAGE_STATS,请小心。使用cmd appops将授予某些功能的权限,而pm grant将授予其他功能的权限。

感谢您的回复。以下是应用程序所需的权限列表: WRITE_EXTERNAL_STORAGE,MANAGE_USB,ACCESS_FINE_LOCATION和ACCESS_NETWORK_STATE。 - Prashant Sharma
所以在清单中查找它们,并使用适当的操作来授予它们(如果可能)。 - TheWanderer
谢谢,但我仍然遇到同样的问题。即使我将我的应用程序放在priv-app文件夹中,它仍会要求“特权”权限。“MANAGE_USB”权限属于“特权”组。因此,它应该自动授予。但是,在我的情况下并没有发生这种情况。那么,在这种情况下,我是否还需要显式授予权限? - Prashant Sharma
它需要请求吗?这不是运行时权限,您无法自己授权。 - TheWanderer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接