【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )
文章目錄
- 一、Zygote 進程孵化器
- 二、應用啟動概述
dex 解密時 , 需要將 代理 Application 替換為 真實 Application ; 替換 Application 首先要理解系統如何注冊應用的 Application 的 ;
一、Zygote 進程孵化器
Zygote 進程孵化器 : Android 中的所有的進程 , 如 系統進程 , 應用進程 , SystemServer 進程 , 都是由 Zygote 調用 fork 方法創建的 ;
SystemServer 進程 : Android 手機開機后 , 就會啟動 Zygote 進程 , 并且創建 SystemServer 進程 , SystemServer 進程就是 核心服務 所在進程 , 核心服務如 WindowsManagerService , PowerManagerService , ActivityManagerService 等系統服務 ;
ActivityManagerService 服務 : 簡稱 AMS , 該服務由 SystemServer 啟動 , 其主要功能是 控制四大組件啟動和調度工作 , 控制 應用程序的管理和調度工作 ;
二、應用啟動概述
Android 啟動流程涉及的源碼 :
- /frameworks/base/core/java/android/app/ActivityThread.java
- /frameworks/base/core/java/android/app/ApplicationThreadNative.java
- /frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
在 Launcher 應用 ( 系統主界面 ) 中點擊應用圖標 , Launcher 應用會啟動該 app ;
Launcher 應用通過 Instrumentation 經過一系列調用 , 獲取 ActivityManagerService ;
在 ActivityManagerService 中調用 start() 方法 , 首先查看要啟動的應用是否已經存在 ;
如果存在 , 就直接切換到前臺 ;
如果不存在 , 則調用 Process 類 , 通過 Process 類調用 Zygote 的 fork 方法 , 創建一個進程 ;
Zygote 創建新的應用進程后 , 會調用 ActivityThread 的 main 函數 , 在該主函數中 , 會創建 ActivityThread 對象 , 然后啟動 Looper.loop , 無限循環處理消息 ;
在 ActivityThread 中會調用 ActivityThread 對象的 attach 函數 , 在該函數中 , 通過 Binder 機制 , 調用 ActivityManagerProxy 的 attachApplication 方法 ;
之后通過一系列調用 , 通過 Binder 機制調用 ActivityThread 的 bindApplication 方法 , ActivityThread 會向其 Handler 發送 BIND_APPLICATION 消息 , 通過 handleMessage 方法調用 handleBindApplication 方法 , 此時真正的啟動 Application ;
之前研究 UI 繪制流程時 , 看過一段 ActivityThread 繪制相關代碼 , 參考博客 【Android 應用開發】UI繪制流程 ( 生命周期機制 | 布局加載機制 | UI 繪制流程 | 布局測量 | 布局擺放 | 組件繪制 | 瀑布流布局案例 )
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 安全】DEX 加密 (
- 下一篇: 【Android 安全】DEX 加密 (