zoukankan      html  css  js  c++  java
  • Android Framework 分析

    Android Framework 分析 (一)

    目录树

    /framework/base/api 

    /framework/base/awt

    /framework/base/build

    /framework/base/camera

    关于cameraHAL接口库。最终生成native共享库libcamera.so ,编译时根据是否定义USE_CAMERA_STUB来决定系统是否有Camera硬件支持。若没有实际的Camera硬件,则编译时会和虚拟camera静态库(libcamerastub.a,camerahardwarestub.cpp,fakecamera生成)链接生成libcamera.so

    /framework/base/cmds 关于android系统启动时用到的command

    /framework/base/cmds/am

    /framework/base/cmds/app_process 

    可执行文件app_process,该文件可以根据输入参数决定是Zygote启动(参考init.rc中的语句 service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server.

    该执行程式会链接libandroid_runtime.so去链接android runtime。后面我会在详细分析此部分。

    /framework/base/cmds/backup 

    可执行程式btool

    /framework/base/cmds/bmgr

    java可执行程式, backup manager, java库形式分发到目标系统/system/framework/bmgr.jar

    /framework/base/cmds/bootanimation

    android启动动画效果程式,该程式必须在android runtime启动后运行。

    /framework/base/cmds/dumpstate

    android系统调试辅助工具,生成可执行程式dumpstate,同时建立两个程式dumpcrash bugreport指向该程式。

    /framework/base/cmds/dumpsys

    生成可执行程式dumpsys

    /framework/base/cmds/ime

    java可执行程式 IME输入法 input method manager, java库形式分发到目标系统/system/framework/ime.jar

    /framework/base/cmds/input

    java可执行程式,管理input事件例如key event,text event 等,java库形式分发到目标系统/system/framework/input.jar

    /framework/base/cmds/installd

    可执行程式installd,install manager,仅在非simulator系统中运行,安装到目标系统/system/bin/installd

    /framework/base/cmds/keystore

    可执行程式keystore,用途???仅在非simulator系统中运行,安装到目标系统/system/bin/keystore

    /framework/base/cmds/pm

    java可执行程式,package managerjava库形式分发到目标系统/system/framework/pm.jar

    /framework/base/cmds/runtime

    runtime可执行程式,仅在simulator中使用

    /framework/base/cmds/service

    service可执行程式,用来查找,检查,呼叫service,安装到目标系统/system/bin/service

    /framework/base/cmds/servicemanager

    android系统的service manager,可执行文件,安装到目标系统/system/bin/servicemanager

    servicemanager会和kernelbinder driver协作共同完成service的添加、查询、获取、检查等。

    /framework/base/cmds/surfaceflinger

    surfaceflinger可执行程式,安装到目标系统/system/bin/surfaceflinger,

    该程式会初始化surfaceflinger,surfaceflinger::inistantiate(),该程式会链接到libsurfaceflinger.so

    /framework/base/cmds/svc

    /framework/base/cmds/system_server

    system serverlibsystem_server.so->system/lib/libsystem_server.sosystem_server可执行程式->system/bin/system_server.

    该可执行程式不清楚什么用途????

    /framework/core/

    /framework/core/config

    几个简单java常量,(debug标志等)

    /framework/core/java/*

    framework的核心,此处主要指application framework,java库形式分发到/system/framework/

    包括framework.jar,framework-tests.jar sure???

    /framework/core/jni

    framework所需的JNI接口实现库,分发到/system/lib/lib/libandroid_runtime.so

    /framework/core/res

    framework所需的资源文件打包,/system/framework/framework-res.apk,

    /framework/libs

    /framework/base/libs/audioflinger   //mtk6516下是这个路径

    生成libaudioflinger.so,

    若无实际硬件和静态库libaudiointerface.aaudio interface虚拟设备)链接。

    若有实际硬件和libaudio.so链接,若支持bluetooth,则和liba2dp.so链接

    /framework/libs/surfaceflinger

    生成libsurfaceflinger.so

    /framework/libs/ui

    生成libui.so

    /framework/libs/utils

    生成libutils.so

    /framework/services/java/*

    system server java可执行程式service.jar,分发到/system/framework/service.jar

    /framework/services/jni/*

    system server JNI接口实现库,libanroid_servers.so,分发到/system/lib/libanroid_servers.so

     

     

    android framework 分析(二)

     

    启动 Zygote

    -Xzygote /system/bin --zygote --start-system-server

    AndroidRuntime->AppRuntime

     

    int main(int argc,const char* const argv[])

    {

      AppRuntime runtime;生成AndroidRuntime实例

      ...

      AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);

    }

     

    其中 AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);

    呼叫Android::Start(const char* className,const bool startSystemServer)

     

    /framework/base/core/jni/AndroidRuntime.cpp

     

    该函数的处理内容:

    1.处理Jave Virtual Machine的一些参数选项;

    2.创建Dalvik Java虚拟机,JNI_CreateJavaVM(&mJavaVM,&env,&initArgs)

    3.注册Android Runtime中的JNI接口给虚拟机;

    4.呼叫Java com.android.internal.os.ZygoteInitmain函数

     

    在类 com.android.internal.os.ZygoteInitmain函数中,

    1.注册Zygote socket用来接收请求;

    2.加载preloaded classresources用来加快启动速度,文件清单在framework.jar中的preloaded-classes,framework-res.apk中的res;

    3.启动System Server;

    fork出独立的进程名称为system-server,呼叫com.android.server.SystemServer类的main函数;

    HandleSystemServerProcess函数中,RuntimeInit.ZygoteInit调用会呼叫AppRuntimeOnZygoteInit函数。

    4.RuntimeInit.ZygoteInit函数会呼叫 com.android.server.SystemServer类的main函数。

    在此main函数中,系统首先加载android_server共享库libandroid_server.so 源代码位于/framework/base/service/jni

    在该库中有定义JNI_OnLoad函数,所以Dalvik在加载 libandroid_server.so 的时候会首先呼叫该JNI_OnLoad函数,该函数将android server注册到Java虚拟机中,包括 KeyInputQueue,HardwareService,AlarmManager,BatteryService,SensorService,SystemServer 等;

          呼叫在libanroid_server.so中注册的native函数init1,该函数位于/frameworks/base/services/jni/com_android_server_SystemServer.cpp中;

    init1函数呼叫libsystem_server中的system_init函数,该函数位于/frameworks/base/cmds /system_server/library/system_init.cpp中,该函数将SurfaceFlinger/AudioFlinger /MediaPlayer/CameraService等组件注册到ServiceManager

    system_init函数反过来呼叫javacom.android.server.SystemServerinit2函数;

    5.init2函数中,android创建了serverthread,在该threadandroid开始注册各种serviceservice manager中包括EntropyServicePowerManagerActivityManagerTelephonyPackageManagerContentManagerContentProviderBatteryServiceHardwareServiceAlarmManager等等。

    注意该线程使用Looper来执行thread

    至此android system server启动完成。 

    from http://blog.csdn.net/taoshengyang/archive/2010/06/10/5661699.aspx

     

     

    Android Framework 分析 (三)

     

    framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
    \system\framework\am.jar
    \system\framework\am.odex
    \system\framework\android.awt.jar AWT

    \system\framework\android.awt.odex
    \system\framework\android.policy.jar
    \system\framework\android.policy.odex
    \system\framework\android.test.runner.jar
    \system\framework\android.test.runner.odex
    \system\framework\com.google.android.gtalkservice.jar GTalk
    服务
    \system\framework\com.google.android.gtalkservice.odex
    \system\framework\com.google.android.maps.jar
    电子地图库
    \system\framework\com.google.android.maps.odex
    \system\framework\core.jar
    核心库,启动桌面时首先加载这个
    \system\framework\core.odex
    \system\framework\ext.jar
    \system\framework\ext.odex
    \system\framework\framework-res.apk
    \system\framework\framework-tests.jar
    \system\framework\framework-tests.odex
    \system\framework\framework.jar
    \system\framework\framework.odex
    \system\framework\input.jar
    输入库
    \system\framework\input.odex
    \system\framework\itr.jar
    \system\framework\itr.odex
    \system\framework\monkey.jar
    \system\framework\monkey.odex
    \system\framework\pm.jar
    包管理库
    \system\framework\pm.odex
    \system\framework\services.jar
    \system\framework\services.odex
    \system\framework\ssltest.jar
    \system\framework\ssltest.odex
    \system\framework\svc.jar
    系统服务
    \system\framework\svc.odex


  • 相关阅读:
    协程与IO模型
    进程池与线程池
    GIL全局解释器锁
    线程编程
    进程编程
    基于UDP协议的socket
    异常处理
    jquery mobile外部js无法载入问题
    禁用或限制部分WebKit特性
    eval 返回变量值
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124595.html
Copyright © 2011-2022 走看看