android - 如何绕过 root 设备的权限?

标签 android

我正在为媒体盒创建一个安卓应用程序。该框已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。无论哪种方式都可以让您访问。

如果一个权限的保护级别同时有appopsdevelopment,比如PACKAGE_USAGE_STATS,就要小心了。使用 cmd appops 将授予某些功能的权限,而 pm grant 将授予其他功能。

关于android - 如何绕过 root 设备的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53047615/

相关文章:

java - 在另一个应用程序中集成具有自己的数据库的我的模块

android - 为什么我的 SurfaceView 的游戏循环不能运行像样的 FPS?

Android - 完全从 xml 创建 ListView

android - 将包含 ID 的字符串转换为整数 ID

Android:从 URI 获取 EXIF 旋转

android - 在 ListView 中用 CheckBoxes 检查每七个框

android - 无法 bintrayUpload HTTP 404 未找到主题

java - android: google APi OAuth 2.0 - 获取用户信息时出现错误 400

android - 应用程序在 setContentView android 上崩溃,没有堆栈跟踪

android - 如何在应用程序小部件中设置向下滑动和向上滑动手势?