`
ming_fanglin
  • 浏览: 224569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android framework analysis

阅读更多
1.目录树

/framework/base/api

/framework/base/awt

/framework/base/build

/framework/base/camera

关于camera的HAL接口库。最终生成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 manager,java库形式分发到目标系统/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会和kernel的binder 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 server库libsystem_server.so->system/lib/libsystem_server.so和system_server可执行程式->system/bin/system_server.

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

/framework/core/

/framework/core/config

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

/framework/core/java/*

framewor

k的核心,此处主要指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/libs/audioflinger,

生成libaudioflinger.so,

若无实际硬件和静态库libaudiointerface.a(audio 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

启动 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.ZygoteInit的main函数


在 类 com.android.internal.os.ZygoteInit的main函数中,

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

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

3.启动System Server;

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

  在HandleSystemServerProcess函数中,RuntimeInit.ZygoteInit调用会呼叫AppRuntime的OnZygoteInit函数

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函数反过来呼叫java类com.android.server.SystemServer的init2函数;

5.在init2函数中,android创建了serverthread,在该thread中android开始注册各种service到service manager中

包括EntropyService,PowerManager,ActivityManager,Telephony,PackageManager,ContentManager,ContentProvider,

BatteryService,HardwareService,AlarmManager等等。

  注意该线程使用Looper来执行thread
至此android system server启动完成。
分享到:
评论
2 楼 gqdy365 2011-01-09  
东西是好东西,就是现在看不懂啊!支持楼主,希望能写更多的关于android整体理解的东西!
1 楼 boygirl 2011-01-07  
能不能整理成文档呢,这样太泛了,看不懂。还有弄些测试案例,我习惯性是先把东西整理好,成品的,然后再去测试和思考问题。

相关推荐

    android-open-framework-analysis,android开放框架分析.zip

    这个开源项目,"android-open-framework-analysis", 提供了深入理解Android系统内部工作原理的机会,帮助开发者提升应用性能,优化资源管理,以及更好地适配各种设备。 Android开放框架主要包含以下几个关键组件: ...

    Android代码-今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案

    中文说明 A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,...Framework analysis Common Issues Android advanced framework Download implementation 'me.jessyan:autosize:1

    android-open-framework-analysis:Android 开源框架分析

    本文将深入探讨"android-open-framework-analysis"项目,该项目专注于分析Android主流和热门的开源框架,旨在帮助开发者更好地理解和利用这些工具。 首先,我们关注的是Retrofit,这是一个由Square公司开发的类型...

    Android代码-RetrofitUrlManager

    Framework analysis 1 Framework analysis 2 More complete sample Download implementation 'me.jessyan:retrofit-url-manager:1.4.0' Usage Initialize // When building OkHttpClient, the OkHttpClient....

    android-open-source-project-analysis:Android开源项目分析。 注意:该项目已移至https:github.comBeesAndroidBeesAndroid

    代码版本分割版本:N6F26U分支:android-7.1.1_r28版本:牛轧糖支持设备:Nexus 6分析思路Android是一个庞大的系统,Android Framework只是对系统的一个封装,里面还牵扯到JNI,C ++,Java虚拟机,Linux系统内核,...

    【eoe+Android特刊】10-17期

    13期“Android Architecture Analysis”则关注Android应用的架构设计,可能涵盖了MVC、MVVM、 MVP等常见的设计模式,以及模块化、组件化开发的实践。通过学习这部分内容,开发者可以构建更稳定、可维护和可扩展的...

    五大安全会议的近几年android安全相关文章.pdf

    2. **Framework in Android System Inter-component Communication**:讨论了Android系统间组件通信的安全框架,旨在增强组件交互的安全性。 这些文章揭示了Android安全的多个层面,包括恶意软件检测、权限管理、...

    Android代码-heros

    A reference connector exists for the Soot framework. Heros... supports solving both IFDS and IDE problems, is multi-threaded and thus highly scalable, provides a simple programming interface, and is...

    Android源码解析

    ### Android源码解析知识点概述 ...- **simple-android-opensource-framework** - 该项目提供了对一些知名Android开源库的简化实现。 - **目标**:帮助开发者快速学习并理解这些开源库的核心设计理念和技术实现。

    InCallUI_issue_analysis_report

    报告中描述了在Android 4.4 KK版本的手机中,当有来电时,手机屏幕点亮并显示来电界面有延迟。延迟时间大概为3到4秒钟,这对于用户体验来说是不可接受的。问题现象为先听到铃声,然后经过一段时间后才显示来电界面。...

    Android代码-RxThreadEffectChecker

    The RxThreadEffectChecker is a static analysis tool for preventing UI access off the main thread in stream-based (RxJava/RxAndroid) Android applications. We are publishing this code as a companion ...

    ChatGPT应用(支持Android、iOS、MacOS、linux、Windows).zip

    "windows"目录可能包含Windows应用程序,如.NET Framework或UWP应用的项目文件,或者用C#、Visual Basic等编写的源代码。开发通常在Visual Studio IDE中进行。 6. **通用文件**: - "说明.md"可能是Markdown格式的...

    Android代码-joana

    This is the README of the Joana IFC analysis framework. Joana is developed at the Programming Paradigms Group of the Karlsruhe Institute of Technology. This software is a RESEARCH PROTOTYPE that comes...

    apktool documentation

    Remove framework file $HOME/apktool/framework/1.apk due to internal API update (Android Marshmallow) v1.5.x -> v2.0.0 Java 1.7 is required Update apktool to v2.0.0 aapt is now included inside ...

    CrossPlatformDiskTest:Windows,macOS和Android存储(HDD,SSD,RAM)速度测试性能基准测试应用程序

    下载并尝试Windows(x86和x64)和.NET Framework 4.8 macOS 10.13以上 Android 4.4以上Play市场: : APK: : Linux控制台应用程序GitHub回购: : 基准图这个怎么运作该测试将测量读取/写入每个块所需的时间(RAM->...

    Gray.Hat.Hacking.The.Ethical.Hackers.Handbook.4th.Edition

    Hijack Web browsers with Metasploit and the BeEF Injection Framework Neutralize ransomware before it takes control of your desktop Dissect Android malware with JEB and DAD decompilers Find one-day ...

    MobSF框架及源代码分析1

    MobSF(Mobile-Security-Framework)是一款强大的开源移动应用自动化测试框架,专注于安卓和苹果应用的安全性评估。该框架使用Python的Django框架构建,数据存储采用sqlite,支持对apk、ipa和zip格式的源代码进行...

    VideoAnalysis:视频编辑

    Java作为一种广泛应用于服务器端开发、Android应用开发及大数据处理的高级编程语言,其强大的库支持使其在处理视频数据时也表现出色。以下是一些关键的知识点: 1. **Java Media Framework (JMF)**: 这是Java平台上...

Global site tag (gtag.js) - Google Analytics