目录
- 前言
- 正文
- system
- zygote
- SystemServer
- Car
- core
- os
- app
- Activity.java
- ActivityThread.java
- ContextImpl.java
- Dialog.java
- Instrumentation.java
- Application.java
- Fragment.java
- Service.java
- content
- input
- view
- webkit
- widget
- media
- MediaMetadataRetriever.java
- AudioTrack.java
- AudioManager.java
- AudioFocusRequest.java
- AudioAttributes.java
- session
- audiopolicy
- browse
- server
- 参考文章
前言
简单记录一下Android中源码相关文件所在目录介绍,只是简单的记录一下,方便自己翻阅。
只是比较常用的文件记录,流水账
正文
没啥可看到,也就是个人的流水账哈。
system
init
init.cpp
system\core\init\init.cpp
init进程是Android系统启动时,启动的第一个进程
init.rc
\system\core\rootdir\init.rc
vold
Disk.cpp
system\vold\model\Disk.cpp
PublicVolume.cpp
system\vold\model\PublicVolume.cpp
zygote
Zygote(意为“受精卵”)是 Android 系统中的一个核心进程,负责 孵化(fork)应用进程,以优化应用启动速度和内存占用。
zygote的作用
预加载java类和资源
系统类,文件资源,共享库等,减少应用启动开销。
孵化(fork)进程
启动了SystemServer等进程
安全管理
继承 Zygote 的安全策略(如 SELinux 上下文、UID/GID),确保应用运行在正确的权限环境下
内存优化
通过copy-on-write(写时复制)机制共享只读内存页,降低进程的内存占用。
zygote的启动
init.rc有zygote启动相关配置,比如支持64或32,还可以两者共存,方便兼容。
# 64 32共存,但64为主 \system\core\rootdir\init.zygote64_32.rc # 只有64位 \system\core\rootdir\init.zygote64.rc # 只有32位 \system\core\rootdir\init.zygote32.rc
具体启动那个看编译脚本配置。根据rc文件中配置的,zygote启动代码为app_main.cpp
\frameworks\base\cmds\app_process\app_main.cpp
SystemServer
frameworks\base\services\java\com\android\server\SystemServer.java
zygote中通过forkSystemServer()进行启动
Runnable r = forkSystemServer(abiList, socketName, zygoteServer); handleSystemServerProcess() zygoteInit() RuntimeInit.applicationInit() findStaticMain() new MethodAndArgsCaller() r.run();
findStaticMain()就是通过反射。
主要工作
初始化系统环境,时间,拾取,语言等
初始化系统Looper加载so库
创建Context和SystemServiceManager
启动服务并添加到Service列表(引导服务,核心服务,其他服务)
进入Looper循环
引导服务
安装服务(Installer)
Activity管理服务(ActivityManagerService)
电源服务(PowerManagerService)
背光服务(LightService)
显示器服务(DisplayManagerService)
程序包管理服务(PackageManagerService)
用户管理服务(UserManagerService)
传感器服务(SensorService)
核心服务
电池服务(BatteryService)
统计数据管理服务(UsageStatsManagerInternal)
WebView更新服务(WebViewUpdateService)
Binder调佣状态服务(BinderCallsStatsService)
其他服务
振动服务
闹钟服务
输入管理服务
窗口管理服务
蓝牙服务
存储服务
WiFi管理服务
定位管理服务
等
Car
\packages\services\Car
core
\frameworks\base\core
os
frameworks\base\core\java\com\android\internal\os
app
目录为
\frameworks\base\core\java\android\app\
常见的有:
Activity.java
四大组件之一
ActivityThread.java
为应用初始化类,是main()入口,里面实现了Handler消息循环,负责四大组件的生命周期,负责创建Applicantion对象。
ContextImpl.java
Context的实现类。
Dialog.java
对话框类。
Instrumentation.java
一些方法的封装,让Activity中调用。
Application.java
app的入口
Fragment.java
堪称Android第五大组件。
Service.java
四大组件之一,服务。
等
content
frameworks\base\core\java\android\content
常见的有:
Context.java
上下文环境,Android核心类,也是个抽象类。
ContextWrapper.java
Content的装饰类,封装了很多方法,但都是使用Context的方法,方法的最终实现是在ContextImpl.java。
Intent.java
意图,主要是解决Android应用的各项组件之间的通讯。
BroadcastReceiver.java
广播接收者,四大组件之一。通过广播的方式进行消息传递,其本质是一个全局的监听器,可以监听到各种广播,可以用来实现不同组件之间的通信
ContentProvider.java
内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。四大组件之一。
等
input
\frameworks\base\core\java\android\hardware\input\
常见的有:
InputManager.java
view
frameworks\base\core\java\android\view
常见的有:
View.java
ViewGroup.java
ViewRootImpl.java 这里有按键分发,UI主线程检查checkThread()
WindowManager.java
WindowManagerGlobal.java
InputEvent.java
webkit
frameworks\base\core\java\android\webkit
常见的有
WebView.java
WebViewClient.java
widget
frameworks\base\core\java\android\widget
Button.java
TextView.java
ImageView.java
media
\frameworks\base\media\java\android\media\
MediaMetadataRetriever.java
媒体元数据解析类。
AudioTrack.java
音频播放器类。
AudioManager.java
音频管理类
AudioFocusRequest.java
焦点申请相关类
AudioAttributes.java
音频焦点相关类
session
媒体应用框架相关
MediaSession.java
MediaSessionManager.java
PlaybackState.java
audiopolicy
AudioPolicy.java
在Car音频焦点中用到
browse
MediaBrowser.java
媒体应用框架相关,用于跟MediaBrowserService通信。
server
frameworks\base\services\core\java\com\android\server
am
audio
media
pm
policy
frameworks/base/services/core/java/com/android/server/policy
PhoneWindowManager.java
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java