android源码中重要文件

一 用户空间init

我这里不分析linux启动的那第一个程序init。

 init代码在/system/core/init/init.c。感兴趣的可从main函数开始分析

android的其他重要进程都是init加载init.rc配置文件来fork的。其中,最重要的init.rc位于source/system/core/rootdir下。

init.rc有它特有的语法,可google一下就知道了。

二 zygote的诞生

zygote程序是有app_process弄出来的,app_process的启动在init.rc中有对应行。

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

//第一个zygote是这个服务的名字,实际启动的程序位于system/bin下的app_process,后面是这个程序的启动参数
    socket zygote stream 666

//这个表示init将创建一个unix域的socket,666是rwx的读写执行权限。

其中,app_process位于/frameworks/base/cmds/app_process/app_main.cpp中。

3.什么是Service Manager

里面理解一下就可以了,Service manager是管理以上services的一个进程,他是实际存在的

源代码位于:frameworks/base/cmds/servicemanager

 

servicemanager是init的子进程

mediaserver是init的子进程

zygote是init的子进程

system_server和所有的java应用程序是zygote的子进程

 

system_server executable(c/c++写的程序)


frameworks/base/cmds/system_server/

system_main.cpp
library/system_init.cpp

 

SystemServer (java程序)
frameworks/base/services/java/com/android/server/
SystemServer.java


Zygote (java程序)
frameworks/base/core/java/com/android/internal/os/
ZygoteInit.java

 

 

app_main 调用 zygoteInit

Zygote 分裂出 system_server



 

 对外部输入事件处理流程分析:

/frameworks/base/services/java/com/android/server/WindowManagerService.java

/frameworks/base/services/java/com/android/server/InputManager.java

/frameworks/base/services/jni/com_android_server_InputManager.cpp

/frameworks/base/libs/ui/InputReader.cpp

/frameworks/base/libs/ui/InputDispatcher.cpp

/frameworks/base/libs/ui/EventHub.cpp

其中,WindowManagerService.java和InputManager.java主要向Android为窗口系统提供服务,EventHub.cpp主要用来读取设备文件中的RawEvent,而InputReader.cpp和InputDispatcher.cpp算是它们之间的对接层。它们的关系是:WindowManagerService通过InputManager提供的接口开启一个线程驱动InputReader不断地从/dev/input/目录下面的设备文件读取事件,然后通过InputDispatcher分发给连接到WindowManagerService服务的客户端。InputReader从设备文件中读取的是RawEvent,在交给InputDispatcher进行分发之前,它需要先把RawEvent进行转化分类,拆分成KeyEvent、MotionEvent、TrackEvent各种类型等。


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值