立即注册,突破游客限制,与技术大牛交流切磋,畅享海量资源,让你的技术之路不再孤单!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
了解安卓的启动流程 对于了解加固原理是非常重要的
- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- 第一阶段:Launcher 处理
- Launcher.startActivity()
- ↓
- ActivityTaskManager.startActivity()
- ↓ (Binder 跨进程)
- ActivityManagerService.startActivity()
- └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
- ↓
- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- 第二阶段:进程创建
- Process.start()
- ↓
- ZygoteProcess.start()
- ↓
- Zygote.fork()
- ↓
- ActivityThread.main()
- └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
- ↓
- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- 第三阶段:SO 加载
- LoadedApk.loadLibrary()
- ↓
- System.loadLibrary()
- ↓
- Runtime.loadLibrary0()
- ↓
- DexPathList.findLibrary()
- └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
- ↓
- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- 第四阶段:DEX 加载
- PathClassLoader.loadClass()
- ↓
- BaseDexClassLoader.loadClass()
- ↓
- DexPathList.findClass()
- ↓
- DexFile.loadClassBinaryName()
- └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
- ↓
- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- 第五阶段:Application 创建
- LoadedApk.makeApplication()
- ↓
- Instrumentation.newApplication()
- ↓
- Application.attach()
- ↓
- Application.onCreate()
- └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
- ↓
- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- 第六阶段:Activity 启动
- ActivityThread.handleLaunchActivity()
- ↓
- ActivityThread.performLaunchActivity()
- ↓
- Instrumentation.newActivity()
- ↓
- Activity.onCreate()
- └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
- ↓
- ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
- 第七阶段:视图绘制
- Activity.setContentView()
- ↓
- PhoneWindow.setContentView()
- ↓
- LayoutInflater.inflate()
- ↓
- ViewRootImpl.performTraversals()
- ↓
- measure() → layout() → draw()
- └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
复制代码
|