当前位置: 首页 > news >正文

Android Framework学习笔记(2)----系统启动

Android系统的启动流程

启动过程中,用户可控部分是framework的init流程。init是系统中的第一个进程,其它进程都是它的子进程。

启动逻辑源码参照:system/core/init/main.cpp

关键调用顺序:main->FirstStageMain->SetupSelinux->SecondStageMain

FirststageMain:挂载各种文件。

SetupSelinux:安全策略。每个类型的进程都有自己的权限,能否访问网络,能否访问文件,接收广播等。其中“.te”文件为安全策略文件。

SecondStageMain:挂载额外文件,设置进程OOM等级,LoadBootScripts,启动其它进程等。其中loadbootscritp来解析.rc文件。

.rc文件:run command的缩写,是一堆脚本指令,init进程可以读取rc文件来运行脚本,从而启动其它进程。

system/core/rootdir/init.rc部分内容如下:

在解析和执行.rc文件的过程中,会fork一个zygote进程。而安卓上其他的应用进程都是由zygote进程孵化的。

zygote进程源码参照:frameworks/base/cmds/app_process/app_main.cpp

zygote的启动,源码参照:frameworks/base/core/jni/AndroidRuntime.cpp中的void AndroidRuntime::start(const char* className, const Vector<String8>& options, bool zygote)方法

一个APP,可以有多个进程,一个进程有一个VM。

zygote启动过程包括,

设置环境变量:setenv("ANDROID_ROOT", rootDir, 1);

初始化JVM:startVm(&mJavaVM, &env, zygote, primary_zygote)

注册JNI:startReg(env)

http://www.lryc.cn/news/334480.html

相关文章:

  • 项目管理中的估算活动资源
  • java中的set集合及其子类
  • shell脚本查询匹配文件进行操作
  • vulnhub----natraj靶机
  • Web Component 组件库有什么优势
  • 如何配置vite的proxy
  • Linux CentOS基础操作
  • 最佳情侣身高差
  • 谷歌开发者账号防关联:如何选择性价比高的VPS,阿里、腾讯、酷鸟、AWS?
  • Virtual digital asset $E=$eaco. EarthChain
  • [计算机网络] 当输入网址到网页
  • 五年经验,还不懂小表驱动大表
  • springboot+websocket+微信小程序实现评论区功能
  • 【项目】如何在面试中介绍自己的项目经验(附如何解决未知的问题成长路线)
  • 解决Selenium元素拖拽不生效Bug
  • 提示工程中的10个设计模式
  • 提高网站安全性,漏洞扫描能带来什么帮助
  • 不要再使用 @Builder 注解了!有深坑呀!
  • 《UE5_C++多人TPS完整教程》学习笔记31 ——《P32 角色移动(Character Movement)》
  • 怎么使用jwt,token以及redis进行续期?
  • AI日报:北大Open Sora视频生成更强了;文心一言可以定制你自己的声音;天工 SkyMusic即将免费开放;
  • 替换空格(替换特定字符)
  • ctfshow web入门 php特性 web123--web139
  • pta L1-002 打印沙漏
  • 【简单讲解下PHP AES加解密示例】
  • 设计模式总结-外观模式(门面模式)
  • LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤
  • es6:set()和weakset()
  • C#仿OutLook的特色窗体设计
  • Jmeter的使用