为取经而来_Android 10.0系统启动之Zygote进程(二)-「Android取经之路」

感谢您的阅读与点赞!欢迎点击右上角关注:「大猫玩程序」

微信公众号:大猫玩程序

28ddd9a148b473fb2c78ecad324f102e.png

前几节已经讲完了Android10.0的Init启动过程以及Zygote的架构。

Android 10.0系统源码取经之路——启动篇

Android系统架构浅析-「Android取经之路」

Android是怎么启动的-「Android取经之路」
Android 10.0系统启动之init进程(一)-「Android取经之路」

Android 10.0系统启动之init进程(二)-「Android取经之路」

Android 10.0系统启动之init进程(三)-「Android取经之路」
Android 10.0系统启动之init进程(四)-「Android取经之路」

Android 10.0系统启动之Zygote进程(一)-「Android取经之路」

这一节开始分析Zygote在Nativate-C空间的启动源码。

4. Zygote进程启动源码分析

我们主要是分析Android Q(10.0) 的Zygote启动的源码。

4.1 Nativate-C世界的Zygote启动要代码调用流程:

9554a608fd91ef07e1db2bb56426e772.png

4.1.1 [app_main.cpp] main()

Zygote本身是一个Native的应用程序,刚开始的进程名称为“app_process”,运行过程中,通过调用setArgv0将名字改为zygote 或者 zygote64(根据操作系统而来),最后通过runtime的start()方法来真正的加载虚拟机并进入JAVA世界。

int main(int argc, char* const argv[]){ //zygote传入的参数argv为“-Xzygote /system/bin --zygote --start-system-server --socket-name=zygote” //zygote_secondary传入的参数argv为“-Xzygote /system/bin --zygote --socket-name=zygote_secondary” ... while (i < argc) { const char* arg = argv[i++]; if (strcmp(arg, "--zygote") == 0) { zygote = true; //对于64位系统nice_name为zygote64; 32位系统为zygote niceName = ZYGOTE_NICE_NAME; } else if (strcmp(arg, "--start-system-server") == 0) { //是否需要启动system server startSystemServer = true; } else if (strcmp(arg, "--application") == 0) { //启动进入独立的程序模式 application = true; } else if (strncmp(arg, "--nice-name=", 12) == 0) { //niceName 为当前进程别名,区别abi型号 niceName.setTo(arg + 12); } else if (strncmp(arg, "--", 2) != 0) { className.setTo(arg); break; } else { --i; break; } } .. if (!className.isEmpty()) { //className不为空,说明是application启动模式 ... } else { //进入zygote模式,新建Dalvik的缓存目录:/data/dalvik-cache maybeCreateDalvikCache(); if (startSystemServer) { //加入start-system-server参数 args.add(String8("start-system-server")); } String8 abiFlag("--abi-list="); abiFla
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值