AOSP 8.0 系统启动之五systemserver启动(二)

文章详细阐述了Android系统服务SystemServer的启动过程,从Zygote进程如何孵化SystemServer,到DexOpt优化,再到Binder线程的启动,以及最终调用SystemServer的main方法。过程中涉及的关键类包括ZygoteInit、RuntimeInit和InstallerConnection,以及关键步骤如设置类加载器、处理异常、初始化Binder通信等。

目录​​​​​​​

前言

一、systemserver开始工作

1.1 ZygoteInit.handleSystemServerProcess

1.1.1 ZygoteInit.performSystemServerDexOpt

1.1.2  ZygoteInit.createPathClassLoader

1.2 ZygoteInit.zygoteInit

1.2.1 RuntimeInit.commonInit

1.2.2 ZygoteInit.nativeZygoteInit

1.2.3 RuntimeInit.applicationInit()

1.2.4 RuntimeInit.invokeStaticMain


前言

        上一篇文章已经将systemserver进程创建出来,接下去重点分析下剩余的主要逻辑;

        涉及源码

/frameworks/base/core/java/com/android/internal/os/
  - ZygoteInit.java
  - RuntimeInit.java
  - Zygote.java

/frameworks/base/core/services/java/com/android/server/
  - SystemServer.java

/frameworks/base/core/jni/
  - com_android_internal_os_Zygote.cpp
  - AndroidRuntime.cpp

/frameworks/base/cmds/app_process/App_main.cpp

一、systemserver开始工作

1.1 ZygoteInit.handleSystemServerProcess

public class ZygoteInit {
    private static Runnable forkSystemServer(String abiList, String socketName, ZygoteServer zygoteServer) {
        xxxx
        /* For child process */
        if (pid == 0) {
            //有两个zygote进程情况,需等待第2个zygote创建完成。
            if (hasSecondZygote(abiList)) {
                waitForSecondaryZygote(socketName);
            }
        
            zygoteServer.closeServerSocket(); //需要关闭zygote原有的socke
            return handleSystemServerProcess(parsedArgs);  //
        }
    }
    
    //system_server进程已经创建ok,进而继续调用systemServer.main函数
    private static Runnable handleSystemServerProcess(ZygoteConnection.Arguments parsedArgs) {
        //设置当前进程名称
        if (parsedArgs.niceName != null) {
            Process.setArgV0(parsedArgs.niceName);
        }
        
        final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH");
        // $SYSTEMSERVERCLASSPATH                                         
        // /system/bin/sh: /system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar:/system/framework/dframework.jar: not found
        if (systemServerClasspath != null) {
            //调用installd 将jar->dex->odex
    	    performSystemServerDexOpt(systemServerClas
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值