adb 的 BroadcastReceiver 权限 shell
BroadcastReceiver permission for adb shell
考虑一个使用 BroadcastReceiver
的简单工具来实现一个简单的目标。因为这不应被其他应用程序使用,所以它定义了一个保护级别为 signature
或 signatureOrSystem
:
的权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="any.test">
<permission
android:name="any.test.PERMISSION"
android:protectionLevel="signatureOrSystem" />
<application android:label="AnyTest">
<receiver
android:name=".Receiver"
android:exported="true"
android:permission="any.test.PERMISSION" />
</application>
</manifest>
现在我想通过
发送广播来测试这个
adb shell am broadcast -n any.test/.Receiver
来自我的电脑。虽然这在模拟器上工作得很好,但设置此权限后它在真实设备上根本不起作用。如果未设置权限,则一切正常。
那么我如何定义或授予权限,以便我可以使用 ADB
在真实设备上测试所有这些?
我想让这个导出的接收器在调试模式下更安全一些,所以如果有 ADB
使用的特殊权限或 运行 时间测试只允许来自 ADB
我可以在 Receiver.onReceive(Context, Intent)
中实现,它也会有所帮助。接收器不必同时为 ADB
和其他应用程序工作。
root shell 可以发送受任何权限保护的任何广播。
一个普通的shell也被授予了很多权限,查看AOSP源代码中的这个文件:frameworks\base\packages\Shell\AndroidManifest.xml.
将您的any.test.PERMISSION
替换为此文件中保护级别为signatureOrSystem
的一个权限,如android.permission.REAL_GET_TASKS
。之后,您可以在shell中向此接收器发送广播,但其他第三个应用程序不能。
我不想更改权限。相反,我创建了一个 Activity 作为代理:
考虑一个使用 BroadcastReceiver
的简单工具来实现一个简单的目标。因为这不应被其他应用程序使用,所以它定义了一个保护级别为 signature
或 signatureOrSystem
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="any.test">
<permission
android:name="any.test.PERMISSION"
android:protectionLevel="signatureOrSystem" />
<application android:label="AnyTest">
<receiver
android:name=".Receiver"
android:exported="true"
android:permission="any.test.PERMISSION" />
</application>
</manifest>
现在我想通过
发送广播来测试这个adb shell am broadcast -n any.test/.Receiver
来自我的电脑。虽然这在模拟器上工作得很好,但设置此权限后它在真实设备上根本不起作用。如果未设置权限,则一切正常。
那么我如何定义或授予权限,以便我可以使用 ADB
在真实设备上测试所有这些?
我想让这个导出的接收器在调试模式下更安全一些,所以如果有 ADB
使用的特殊权限或 运行 时间测试只允许来自 ADB
我可以在 Receiver.onReceive(Context, Intent)
中实现,它也会有所帮助。接收器不必同时为 ADB
和其他应用程序工作。
root shell 可以发送受任何权限保护的任何广播。
一个普通的shell也被授予了很多权限,查看AOSP源代码中的这个文件:frameworks\base\packages\Shell\AndroidManifest.xml.
将您的any.test.PERMISSION
替换为此文件中保护级别为signatureOrSystem
的一个权限,如android.permission.REAL_GET_TASKS
。之后,您可以在shell中向此接收器发送广播,但其他第三个应用程序不能。
我不想更改权限。相反,我创建了一个 Activity 作为代理: