BroadcastReceiver权限adbshell

考虑一个简单的工具,使用BroadcastReceiver实现一个简单的目标。 因为这不应该被其他应用程序使用,所以它定义了具有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> 

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

 adb shell am broadcast -n any.test/.Receiver 

从我的电脑。 虽然这在仿真器上可以很好地工作,但是在设置此权限时,在真实设备上完全不起作用。 如果没有设置权限,一切都按预期运行。

那么如何定义或授予权限,以便我可以使用ADB在真实设备上testing所有这些?

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

Solutions Collecting From Web of "BroadcastReceiver权限adbshell"

一个根shell可以发送任何权限保护的广播。
一个普通的shell也被授予许多权限,在AOSP源代码中检查这个文件: frameworks \ base \ packages \ Shell \ AndroidManifest.xml 。

将你的any.test.PERMISSIONreplace为这个文件中的一个权限,即any.test.PERMISSIONsignatureOrSystem ,就像android.permission.REAL_GET_TASKS一样。 之后,你可以发送广播到这个接收器的壳,但其他第三个应用程序不能。