Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> android安全問題(六) 搶先接收廣播 - 內因篇之廣播接收器注冊流程

android安全問題(六) 搶先接收廣播 - 內因篇之廣播接收器注冊流程

編輯:Android開發教程

導讀:本文說明系統是如何注冊動態廣播以及靜態廣播,這裡主要注意其注冊的順序

這篇文章主 要是針對我前兩篇文章

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目錄為例

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved