Android源码分析--Android系统启动

简介: Android源码分析--Android系统启动

Android系统启动


其实Android系统的启动最主要的内容无非是init、Zygote、SystemServer这三个进程的启动,他们一起构成的铁三角是Android系统的基础。这里我不会贴上大段大段的代码,只是一些总结,并提供了相关源码的链接。


启动大纲


  1. 启动电源以及引导程序加载


  1. 引导程序BootLoader启动


  1. Linux内核启动


  1. init进程启动


  1. Zygote进程启动


  1. SystemServer进程启动


  1. Launcher启动


启动流程图


微信截图_20220515214117.png


启动详解


init进程启动的准备工作


init进程是在Linux内核加载完成后启动的,因此要想启动init进程,必须先加载Linux内核,而Linux则是由引导程序BootLoader拉起来的。


  • 当电源被按下后,引导芯片代码(ROM)执行,并将引导程序BootLoader加载到RAM中执行。


  • BootLoader运行,它的作用就是把系统OS拉起来并运行。


  • Linux内核被拉起运行后,会设置缓存、被保护存储器、计划列表、加载驱动等,最后会在系统文件中寻找init.rc文件,启动init进程。


init进程启动


init进程主要用于初始化和启动属性服务,并启动Zygote进程。init进程的源码在system/core/init/init.cpp`下。


  • 创建和挂载启动所需要的文件目录(tmpfs、devpts、proc、sysfs和selinuxfs),他们都是系统运行时目录。


  • 初始化并启动属性服务(类似window里面的注册表)。



  • 启动Zygote进程。


Zygote进程启动


在Android系统中,DVM和ART、应用程序进程以及运行系统的关键服务SystemServer进程都是由Zygote进程来创建的,我们也可以将其称为孵化器。它通过fork的形式来创建应用程序进程和SystemServer进程。



  • AndroidRuntime中创建了Java虚拟机,并为其注册了JNI方法


  • 通过JNI反射调用ZygoteInit进入Zygote的Java框架层,最终启动了Zygote进程。


ZygoteInit的main方法


这里需要注意的是,之前的所以初始化操作都是在Native层进行的,直到我们通过JNI调用ZygoteInit的main方法后,我们才进入了Java框架层。


  • 创建了一个Server端的socket(主要用于跨进程通信)。


  • 预加载类和资源。


  • 启动SystemServer进程。


  • 等待AMS(ActivityManagerService)请求创建新的应用程序进程。


SystemServer进程启动


SystemServer进程主要用于创建和启动系统服务,包括我们常用的AMS、WMS和PMS等。


  • 启动Binder线程池,用于与其他进程进行通信。


  • 创建SystemServiceManager,其用于对系统的服务进行创建、启动和生命周期的管理。


  • 启动各种系统服务(引导服务、核心服务和其他服务等)


Launcher启动


Launcher通俗地说就是Android系统的桌面,是系统的门户,用于启动应用程序,其本质就是一个Activity,类名为"com.android.launcher3.Launcher",点击查看Launcher的AndroidManifest.xml



  • AMS中又会调用ActivityStackSupervisor和ActivityStack进行一系列的准备工作,最终又调用了AMS的startHomeActivityLocked方法,使用ActivityStarterstartHomeActivityLocked启动Launcher。


启动架构示意图


我们都知道Android系统架构是Linux Kernel、Android Runtime、Liberaries、Application Framework和Application这五个部分组成的,如下图所示:


微信截图_20220515214157.png


那么Android系统在启动过程中,都经历了哪些架构组成部分呢?以下给出简要的示意图:


微信截图_20220515214229.png


相关文章
|
4月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
4月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
5月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
151 15
Android 系统缓存扫描与清理方法分析
|
3月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
3月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
4月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
135 16
|
4月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
4月前
|
算法 JavaScript Android开发
|
4月前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
270 2
|
5月前
|
安全 搜索推荐 Android开发
深入探索安卓与iOS系统的差异及其对用户体验的影响
在当今的智能手机市场中,安卓和iOS是两大主流操作系统。它们各自拥有独特的特性和优势,为用户提供了不同的使用体验。本文将深入探讨安卓与iOS系统之间的主要差异,包括它们的设计理念、用户界面、应用生态以及安全性等方面,并分析这些差异如何影响用户的使用体验。

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    Android实战经验之Kotlin中快速实现MVI架构
  • 10
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    64
  • 2
    android FragmentManager 删除所有Fragment 重建
    25
  • 3
    Android实战经验之Kotlin中快速实现MVI架构
    41
  • 4
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    41
  • 5
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    46
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    156
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    53
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    73
  • 9
    Android历史版本与APK文件结构
    179
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54