文章目录

  • 一、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 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )

【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )相关推荐

  1. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 后续分析 | Application 替换位置 )

    文章目录 一.ActivityThread 后续分析 二.ActivityThread 相关源码 三.Application 替换位置 dex 解密时 , 需要将 代理 Application 替换为 ...

  2. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 后续分析 )

    文章目录 一.LoadedApk 后续分析 二.LoadedApk 后续先关源码 dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; 替换 Applic ...

  3. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )

    文章目录 一.Instrumentation 源码分析 二.Instrumentation 创建 Application 相关的部分源码 dex 解密时 , 需要将 代理 Application 替换 ...

  4. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 源码分析 )

    文章目录 一.LoadedApk 源码分析 二.LoadedApk 源码 makeApplication 方法分析 dex 解密时 , 需要将 代理 Application 替换为 真实 Applic ...

  5. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 源码分析 )

    文章目录 一.ActivityThread 源码分析 二.ActivityThread 部分代码示例 dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; ...

  6. 【Android 安全】DEX 加密 ( Application 替换 | 兼容 ContentProvider 操作 | 源码资源 )

    文章目录 一. 命中 ActivityThread 中 installProvider 方法的分支三 1. 原理分析 2. 代码实现 二. 在 ContextImpl 的 createPackageC ...

  7. 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application 二 )

    文章目录 一. ActivityThread 中的 installProvider 方法 ( 创建 ContentProvider 内容提供者 ) 二. installProvider 方法的第三分支 ...

  8. 【Android 安全】DEX 加密 ( Application 替换 | 分析 BroadcastReceiver 组件中调用 getApplication() 获取的 Application )

    文章目录 一. Service 中的 getApplication() 方法分析 二. ActivityThread 中的 H 处理 RECEIVER 消息 三. ActivityThread 中的 ...

  9. 【Android 安全】DEX 加密 ( Application 替换 | 替换 LoadedApk 中的 Application mApplication 成员 )

    文章目录 一. 当前 Application 替换进度 二. 替换 LoadedApk 中的 Application mApplication 成员 一. 当前 Application 替换进度 上一 ...

最新文章

  1. Android之Activity的四种启动模式
  2. 计算整数n的b进制展开式
  3. mysql_contents_将MySQLhelpcontents的内容有层次的输出方法推荐
  4. 桶排序算法c语言10个数组,桶排序算法
  5. Makefile 打印变量的值
  6. 服务器自动删路由,云服务器Windows下添加、删除和修改静态路由
  7. C# 连接SQL 连接字符串
  8. 2013应届毕业生“百度”校招应聘总结
  9. 147.有序数组的TwoSum(力扣leetcode) 博主可答疑该问题
  10. 如何制作一个横版格斗过关游戏_AppStore限免推荐丨加油打工人 竞速+横版格斗2款游戏陪你过周末?_手机游戏...
  11. jpg转pdf转换器注册码
  12. Moloch网络流量分析工具
  13. 解决Maven使用install出错出现Fatal error compiling: UTF-8的问题
  14. 纳秒脉冲等离子体放电
  15. 佳能(数码相机)SDK使用记录
  16. 【Python刷题篇】——Python入门 011面向对象(二)
  17. RFID到底是什么技术
  18. 黄金的18K和24K是什么意思
  19. 结构体自定义指针函数c语言,C语言结构体中的函数指针
  20. Java游戏编程---第一章 2D图形和动画

热门文章

  1. Fedora下校园网上网指南(802.1xDrcom)
  2. python字典排序取最值总结
  3. Nessus Scan
  4. Android得到控件在屏幕中的坐标
  5. GoldenGate 配置extract,replicat进程自启动
  6. Linuxnbsp;JDK1.4卸载与1.6的安装
  7. 高效使用Bitmaps(二) 后台加载Bitmap
  8. jquery内核学习(6)--扩展实现extend
  9. WCF中Service Configuration Editor的使用方法(转)
  10. 课后练习----实现窗口的切换