Android      aosp启动流程6-创建DVM虚拟机及构造java世界入口   
文章目录  [隐藏]

参考:
https://www.jianshu.com/p/47d0121484fc
https://blog.csdn.net/xichangbao/article/details/53104810
https://blog.csdn.net/qq_33023933/article/details/112917326
https://blog.csdn.net/sinat_22657459/article/details/78946921
https://www.dandelioncloud.cn/article/details/1532342564976095234
前文:
http://www.gaohaiyan.com/4062.html

前面梳理到“service zygote /system/bin/app_process64”对应的源码在 frameworks/base/cmds/app_process,Android.bp 中又指向了同目录下的 app_main.cpp 文件。

1. app_main.cpp

frameworks/base/cmds/app_process/app_main.cpp 约165行。
检测是否符合启动zygote的条件,并设置参数。最终通过AndroidRuntime去启动。


2. AndroidRuntime.cpp

frameworks/base/core/jni/AndroidRuntime.cpp 约1136行
解析参数,启动DVM,通过JNI构造java类,启动ZygoteInit类。


2.1. startVm


2.2. startReg


2.2.1. register_com_android_internal_os_ClassLoaderFactory


2.3. JNI_CreateJavaVM

art/runtime/jni/java_vm_ext.cc 约1195行


2.3.1. CreateClassLoaderNamespace和InitializeNativeLoader


2.3.2. LibraryNamespaces.Initialize


2.3.2.1. preloadable_public_libraries


2.3.3. LibraryNamespaces.Create


2.3.4. InitDefaultPublicLibraries和default_public_libraries


public.libraries.txt常用于添加自己的so库,与之有关的“UnsatisfiedLinkError”问题,参考:
https://blog.csdn.net/qq_38907791/article/details/91039130
https://blog.csdn.net/k663514387/article/details/106357975

2.4. GetJavaVM

art/runtime/jni/jni_internal.cc 约2615行


3. ZygoteInit

见下一篇。


- end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设