当Linux内核启动后就会运行core/init/main.cpp文件中的main函数,在main函数中调用了InitLogging初始化了系统的日志打印工具,另外会根据linux传给main函数的参数args进行判断调用不同的启动函数。以调用init.cpp中的SecondStageMain为例,在SecondStageMain方法中首先调用StartPropertyService启动一些必须的属性服务,其次通过执行命令的方式调用位于core/rootdir/init.rc中的late-init脚本,脚本主要创建一些目录、设置文件目录访问权限,并且设置boot_completed的值等。如下图所示:

值得注意的是不同的启动方式,有不同之处,如下图所示

 

在脚本中,根据设备的不同调用了core/rootdir/下不同的init.zygote64.rc文件,在该脚本中对应了framework中的base/cmds/app_process/app_main.cpp文件的main函数。如下图所示:

main函数中创建了AppRuntime对象,并调用了start方法。如下图所示:

AppRuntimeAndroidRuntime的子类,此处调用的是父类的start

start中加载了环境配置,是否是root如下图所示:

接下来继续调用onVmCreatedstartVmstartReg创建和加载虚拟机所需要的参数,启动、注册虚拟机。

最后通过jni的方式调用start-system-server中的main函数,start-system-server指的就是SystemServer

SystemServerrun方法中启动了各种核心服务,比如AMS,WMSIMS等等。

 

更多相关文章

  1. C语言函数的递归(上)
  2. 八款Android(安卓)开发者必备的小工具
  3. Android(安卓)屏幕适配解决方案
  4. Android中文件读写操作
  5. 下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android(
  6. 基于OpenCV和QT,建立Android图像处理程序
  7. Android(安卓)NDK学习笔记:Android(安卓)Studio3.1+CMAKE+OpenCV3
  8. 编译Windows版Android(安卓)Emulator(Cupcake)
  9. 【Android】输入设备配置文件(.idc文件)

随机推荐

  1. STF本地集成-for-Mac
  2. Android-隐藏app图标以及隐式启动
  3. eclipse开发Android程序时一些常见问题与
  4. android企业开发学习——handler
  5. android:persistent属性
  6. MAC操作系统上搭建Android开发平台环境
  7. android之ListView的Adapter使用
  8. 【Android】使用Gallery组件实现循环显示
  9. Android(安卓)libphonenumber Demo 手机
  10. Android(安卓)UI开发第三十四篇——Slidi