adb shell的BroadcastReceiver权限

tyn*_*ynn 15 permissions android broadcastreceiver android-permissions

考虑使用a BroadcastReceiver来实现简单目标的简单工具.因为这不应该被其他应用使用,它定义了与一个的ProtectionLevel许可signaturesignatureOrSystem:

<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>
Run Code Online (Sandbox Code Playgroud)

现在我想通过发送广播来测试这个

adb shell am broadcast -n any.test/.Receiver
Run Code Online (Sandbox Code Playgroud)

从我的电脑.虽然这在模拟器上完全正常,但在设置此权限时,它在真实设备上根本不起作用.如果未设置权限,则一切都按预期工作.

那么如何定义或授予权限以便我可以在真实设备上测试所有这些ADB

我想在调试模式下使这个导出的接收器更安全,所以如果有一个特殊的ADB使用权限或运行时测试只允许ADB我可以实现的调用Receiver.onReceive(Context, Intent),它也会有所帮助.接收器不必同时为ADB其他应用程序工作.

Swi*_*ing 6

root shell 可以发送受任何权限保护的任何广播。
普通的 shell 也被授予了很多权限,请在 AOSP 源代码中检查此文件:frameworks\base\packages\Shell\AndroidManifest.xml

any.test.PERMISSION将此文件中的保护级别替换为一项权限signatureOrSystem,例如android.permission.REAL_GET_TASKS。之后,您可以在 shell 中向该接收器发送广播,但其他第三个应用程序则不能。