Android开发Android开发Android技术知识

Android系统启动过程分析

2019-01-15  本文已影响2人  森林苍穹

第一个系统进程init

init.rc语法

一个完整的init.rc脚本由4种类型组成:

系统关键服务的启动简析

1.Android的"DNS服务器" ServiceManager

2."孕育"新的线程和进程 Zygote

zygote也是由init在解析rc脚本时启动的。

    ServiceName:zygote
    Path: /system/bin/app_process
    Arguments: -Xzygote /system/bin --zygote --start-system-server

所在的程序名叫"app_process".源码路径在/frameworks/base/cmds/app_process 看看它的Android.mk

    LOCAL_SRC_FILES:= \
          app_main.cpp
    LOCAL_SHARED_LIBRARIES := \
            libcutils \
            libutils \
            liblog \
            libbinder \
            libandroid_runtime
    LOCAL_MODULE:= app_process

得知app_process具体实现是app_main.cpp. 其内容主要是:

    if (zygote){
        //启动虚拟机,并执行ZygoteInit
        runtime.start("com.android.internal.os.ZygoteInit",startSystemServer? "start-system-server" : "");
    }

runtime是一个变量,它实际上是一个AndroidRuntime对象。其start函数源码如下

/*frameworks/base/core/jni/AndroidRuntime.cpp*/
void AndroidRuntime::start(const char* className, const char* options)
......
JNIEnv* env;
if (startVm(&mJavaVm, &env) != 0 ){//启动虚拟机
    return;
}
onVmCreated(env); //虚拟机启动后的回调

3.Android的"系统服务"-- SystemServer

SystemServer是Android进入Launcher前的最后准备,它提供了众多由java语言编写的"系统服务"。

后续会分析具体的系统服务。ActivityManagerService是导致Launcher被启动的关键,后面会在分析的。

上一篇下一篇

猜你喜欢

热点阅读