考虑一个简单的工具,使用BroadcastReceiver
实现一个简单的目标。因为这不应该被其他应用程序使用,所以它定义了一个保护级别为signature
or 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 https://android.googlesource.com/platform/frameworks/base/+/master/packages/Shell/AndroidManifest.xml.
更换你的any.test.PERMISSION
该文件中的一项权限是保护级别signatureOrSystem
, like android.permission.REAL_GET_TASKS
。之后,您可以在 shell 中向该接收器发送广播,但其他第三个应用程序则不能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)