android自定义广播无作用,protected-broadcast 规范使用系统应用组件自定义广播

本文详细介绍了Android系统应用如何正确使用自定义广播,特别是涉及protected-broadcast的使用规范。内容包括:设置`android:sharedUserId="android.uid.system"`,AMS对系统应用广播的安全检查,以及如何避免非保护广播的安全风险。建议系统应用在发送广播时指定接收者并添加权限保护,以提升系统安全性。
摘要由CSDN通过智能技术生成

protected-broadcast 系统应用自定义广播规范

一、android:sharedUserId=”android.uid.system”系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加 android:sharedUserId=”android.uid.system”,然后在Android.mk中增加 LOCAL_CERTIFICATE := platform.如Settings,:

下面所说的系统应用也是指这些shareUID是system的应用。在开机PMS初始化的时候,将该name为“android.uid.system”的uid归为1000的system用户ID;PackageManagerService.java

public PackageManagerService(Context context, Installer installer,

boolean factoryTest, boolean onlyCore) {

...

mSettings.addSharedUserLPw("android.uid.system", Process.SYSTEM_UID,

ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);

...

}Process.java

/** * Defines the UID/GID under which system code runs. */

public static final int SYSTEM_UID = 1000;

二、AMS对系统应用发出的广播进行安全检查

当应用或者组件发送广播时,在广播发送的必经之路上,AMS对系统应用发送的广播进行了检查:

1. 判断是否是系统uid,ActivityServiceManager.java

final int broadcastIntentLocked(){

final boolean isCallerSystem;

switch (UserHandle.getAppId(callingUid)) {

//说明是以下几个uid的进程都认为是system应用进程

case Process.ROOT_UID:

case Process.SYSTEM_UID:

case Process.PHONE_UID:

case Process.BLUETOOTH_UID:

case Process.NFC_UID:

isCallerSystem = true;

break;

default:

isCallerSystem = (callerApp != null) && callerApp.persistent;

break;

}

}

这里需要注意的是除了SYSTEM_UID被认为是系统uid,还有ROOT_UID,PHONE_UID,BLUETOOTH_UID,NFC_UID,

需要特别注意的是如果都未定义以上的UID,但应用的AndroidManifest.xml中定义了persistent属性为true,即常驻应用,也会被设定为由系统调用,同样需要进行广播的权限检查。

2. 如果是SYSTEM_UID,便对该广播进行安全检查:if (isCallerSystem) {

checkBroadcastFromSystem(intent, callerApp, callerP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值