Android 的 JAVA 启动流程和调试
韩 超
@ Android 技术
Android 的本地启动流程和调试
第一部分 启动流程
第二部分 调试方法
第一部分 启动流程
app_process 可执行程序 zygote
1 由init.rc
运行服务
com.android.internal.os.
ZygoteInit
com.android.server.
SystemServer
libandroid_servers.so
2 运行JAVA
内部类
3 分裂运行
SystemServer
4 JNI init1()
运行本地
libsystem_server.so
5 调用
6 调用
JAVA的init2
SystemServer
7 启动
各个服务
com. androi d. server
包中的各个服务
各个J AVA程序
各个J AVA程序
zygote以及
各个J AVA进程
各个线程
循环
第一部分 启动流程
service zygote /system/bin/app_process -Xzygote
/system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
frameworks/base/cmds/app_process
app_process 可执行程序会连接一个名称为
libandroid_runtime 的动态库,这个动态库会连接
libvm.so 由此调用 Dalvik 虚拟机。
zygote 是通过 init 进程读取 init.rc 启动 :
第一部分 启动流程
类 com.android.internal.os.ZygoteInit 完成初始
化。 ZygoteInit.java 中的 ZygoteInit.main() 会完成一次
分裂,分裂出来的子进程继续初始化 Java 层的框架。
try {
pid = Zygote.forkSystemServer(
parsedArgs.uid, parsedArgs.gid,
parsedArgs.gids, debugFlags, null);
} catch (IllegalArgumentException ex) {
throw new RuntimeException(ex);
}
/* 子进程的处理 */
if (pid == 0) {
handleSystemServerProcess(parsedArgs);
}