导读:本文说明系统是如何注册动态广播以及静态广播,这里主要注意其注册的顺序
这篇文章主 要是针对我前两篇文章
android安全问题(四) 抢先开机启动 - 结果篇
android安全问题(五 ) 抢先拦截短信 - 结果篇
之前只给出了结果,并没有给出代码分析,现在给出第一步分的分析
大家都知道,广播接收器分为动态注册和静态注册两种
静态接收,就是配置到manifest.xml文 件中,PackageManagerService扫描后记录其信息……
动态接收,就是从代码中注册,通过调用下面的 方法实现
Intent android.content.Context.registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
(下面的流程图估计画的比较水,将就看一下吧,得补习一下UML了)
首先分析静态注册Receiver的流程
静态receiver的注册是由PackageManagerService开机的时 候负责初始化
(PackageManagerService之后简称为PMS)
PMS在开机的时候会对系统一些目录 逐个扫描,解析apk文件。静态广播接收器就是在PMS做这件事情的时候顺便处理的。
PMS会解析apk的 manifest文件,查找这里注册的receiver,然后加载到内存中
下面看一下PMS是如何工作的
这 部分内容没有什么难度,只要有耐心就行,我画了一个很简单流程图,从调用PMS的构造函数开始
注意 ,这里有几个同名函数,大家需要分清。并不是同一个函数调用了两次
这里只看几处
1.PMS初 始化的时候干了些什么
当然,PMS会做很多很多事情,这里我们只看我们关注的,和这篇文章相关的部 分
// Collect all system packages. mSystemAppDir = new File(Environment.getRootDirectory(), "app"); mSystemInstallObserver = new AppDirObserver( mSystemAppDir.getPath(), OBSERVER_EVENTS, true); mSystemInstallObserver.startWatching(); scanDirLI(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode, 0);
扫描目录的顺序
system/framework
system/app
vendor/app
data/app
drm/app- private
这里以system/app目录为例
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 函数
, android、初始化
, 静态
, 广播
, android 广播
, 注册
, system
, 开机广播
, app安全
, 动态加载apk
, 静态广播xml广播
, 静态注册
android广播接收者
android 接收广播、android 广播接收器、android 广播接收者、android广播接收不到、android 接收系统广播,以便于您获取更多的相关知识。