東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

android源码编译11之Android系统服务一览

2015年5月12日星期二



既是做系统服务开发,当然要先了解土著!

壹,System_Server进程


运行在system server进程中的服务比较多,这是整个android框架的基础
 
一,Native服务

1,SurfaceFlinger
 
这是framebuffer合成的服务,将各个应用程序及应用程序中的逻辑窗口图像数据(surface)合成到一个物理窗口中显示 (framebuffer)的服务程序
文件夹/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/native/services/surfaceflinger/
入口/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/native /services/surfaceflinger/main_surfaceflinger.cpp

 
二,Java服务

实现的服务都在这里注册/home/senrsl/android /source/WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/SystemServer.java
接口跟自定义的类什么的都在这里注册/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/Android.mk
这部分的服务大部分都有一个供应用进程使用的manager类,这就是一 个RPC调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到system_server进程中对应的 xxxManagerService中对应的方法,并将结果再通过binder带回。
 
 
1. EntropyService
在4.4.2里叫EntropyMixer,位置在/home/senrsl/android /source/WORKING_DIRECTORY/frameworks/base/services/java/com /android/server/EntropyMixer.java,直接继承Binder
熵服务,周期性的加载和保存随机信息。主要是linux开机后,/dev/random的状态可能是可预知的,这样一些需要随机信息的应用程序就 可能会有问题。这个无需提供应用程序接口。
 
2. PowerManagerService –> PowerManager
实现位置在/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/power/PowerManagerService.java
接口位置在/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/core/java/android/os/IPowerManager.aidl
Android 的电源管理也是很重要的一部分。比如在待机的时候关掉不用的设备,待机时屏幕和键盘背光的关闭,用户操作的时候该打开多少设备等等。
 
3. ActivityManagerService->ActivityManager
AM
实现位置在/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /services/java/com/android/server/am/ActivityManagerService.java
父类位置在/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/app/ActivityManagerNative.java
结构体public final class ActivityManagerService extends ActivityManagerNative implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback{}
这个是整个Android framework框架中最为核心的一个服务,管理整个框架中任务、进程管理, Intent解析等的核心实现。虽然名为Activity的Manager Service,但它管辖的范围,不只是Activity,还有其他三大组件,和它们所在的进程。也就是说用户应用程序的生命管理,都是由他负责的。
 
4. TelephonyRegistry->TelephonyManager
实现于/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/TelephonyRegistry.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl

电话注册、管理服务模块,可以获取电话的链接状态、信号强度等等。<可以删掉,但要看的大概明白>
 
5. PackageManagerService -> PackageManager
PM
实现位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /services/java/com/android/server/pm/PackageManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/content/pm/IPackageManager.aidl

包括对软件包的解包,验证,安装以及升级等等,对于我们现在不能安装.so文件的问题,应该先从这块着手分析原因。
 
6. AccountManagerService -> AccountManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/accounts/AccountManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/accounts/IAccountManager.aidl
类定义public class AccountManagerService  extends IAccountManager.Stub  implements RegisteredServicesCacheListener<AuthenticatorDescription> {...}

A system service that provides  account, password, and authtoken management for all
 accounts on the device。
 
7. ContentService -> ContentResolver
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/content/ContentService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/content/IContentService.aidl

内容服务,主要是数据库等提供解决方法的服务。
 
8. BatteryService
实现位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/BatteryService.java
类定义public final class BatteryService extends Binder {}

监控电池充电及状态的服务,当状态改变时,会广播Intent
 
9. HardwareService
442没找到
不过找到了这个VibratorService
VibratorService实现位置/home/senrsl/android/source/WORKING_DIRECTORY /frameworks/base/services/java/com/android/server/VibratorService.java
VibratorService接 口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/os/IVibratorService.aidl
一般是ring和vibrate的服务程序
 
10. SensorService -> SensorManager
442没找到
管理Sensor设备的服务,负责注册client设备及当client需要使用sensor时激活Sensor
 
11. WindowManagerService -> WindowManager -> PhoneWindowManager
WM
实现位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /services/java/com/android/server/wm/WindowManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/view/IWindowManager.aidl
类定义public class WindowManagerService extends IWindowManager.Stub  implements Watchdog.Monitor, WindowManagerPolicy.WindowManagerFuncs, DisplayManagerService.WindowManagerFuncs, DisplayManager.DisplayListener {...}

和ActivityManagerService高度粘合
窗口管理,这里最核心的就是输入事件的分发和管理。
 
12. AlarmManagerService -> AlarmManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/AlarmManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/app/IAlarmManager.aidl

闹钟服务程序
 
13. BluetoothService -> BluetoothDevice
android442版本改成了BluetoothManagerService跟BluetoothAdapter 组合。
实现位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /services/java/com/android/server/BluetoothManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/bluetooth/IBluetoothManager.aidl

蓝牙的后台管理和服务程序
 
14. StatusBarService -> StatusBarManager
442没找到
负责statusBar上图标的更新、动画等等的服务,服务不大。
 
15. ClipboardService -> ClipboardManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/ClipboardService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/content/IClipboard.aidl

和其他系统的clipBoard服务类似,提供复制黏贴功过。
 
16. InputMethodManagerService -> InputMethodManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/InputMethodManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base/core/java/com/android/internal/view/IInputMethodManager.aidl

输入法的管理服务程序,包括何时使能输入法,切换输入法等等。
 
17. NetStatService
442没找到
手机网络服务
 
18. ConnectivityService -> ConnectivityManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/ConnectivityService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/net/IConnectivityManager.aidl

网络连接状态服务,可供其他应用查询,当网络状态变化时,也可广播改变。
 
19. AccessibilityManagerService-> AccessibilityManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/accessibility/AccessibilityManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/view/accessibility/IAccessibilityManager.aidl

这块可能要仔细看一下,主要是一些View获得点击、焦点、文字改变等事件的分发管理,对整个系统的调试、问题定位等,也需要最这个服务仔细过目 一下。
 
20. NotificationManagerService -> NotificationManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/NotificationManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/app/INotificationManager.aidl

负责管理和通知后台事件的发生等,这个和statusbar胶黏在一起,一般会在statusbar上添加响应图标。用户可以通过这知道系统后台 发生了什么事情。
 
21. MountService
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/MountService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/os/storage/IMountService.java   这还真是个接口
结构体class MountService extends IMountService.Stub implements INativeDaemonConnectorCallbacks, Watchdog.Monitor {...}

磁盘加载服务程序,一般要和一个linux daemon程序如vold/mountd等合作起作用,主要负责监听并广播device的mount/unmount/bad removal等等事件。
 
22. DeviceStorageMonitorService
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/DeviceStorageMonitorService.java
类定义public class DeviceStorageMonitorService extends Binder {...}

监控磁盘空间的服务,当磁盘空间不足10%的时候会给用户警告
 
23. LocationManagerService -> LocationManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/LocationManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /location/java/android/location/ILocationManager.aidl

要加入GPS服务等,这部分要细看,现在应用中的navigation没响应,可以从此处着手看一下
 
24. SearchManagerService -> SearchManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/search/SearchManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/app/ISearchManager.aidl

The search manager service handles the search UI, and maintains a registry of searchable activities.
 
25. Checkin Service(FallbackCheckinService)
442没找到
貌似checkin service是google提供的包,没有源代码,源码只有fallbackCheckinService
 
26. WallpaperManagerService -> WallpaperManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/WallpaperManagerService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/app/IWallpaperManager.aidl

管理桌面背景的服务,深度定制化桌面系统,需要看懂并扩展<同时要兼容>这部分
 
27. AudioService -> AudioManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/media/java/android/media/AudioService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /media/java/android/media/IAudioService.aidl

AudioFlinger的上层管理封装,主要是音量、音效、声道及铃声等的管理
 
28. HeadsetObserver
442没有
耳机插拔事件的监控小循环
 
29. DockObserver
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/DockObserver.java
类定义final class DockObserver extends UEventObserver {...}

如果系统有个座子,当手机装上或拔出这个座子的话,就得靠他来管理了
 
30. BackupManagerService -> BackupManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/BackupManagerService.java
接口定义/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/android/app/backup/IBackupManager.aidl

备份服务
 
31. AppWidgetService -> AppWidgetManager
实现位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/base/services/java/com/android/server/AppWidgetService.java
接口位置/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base /core/java/com/android/internal/appwidget/IAppWidgetService.aidl

Android可以让用户写的程序以widget的方式放在桌面上,这就是这套管理和服务的接口
 
32. StatusBarPolicy
442没有
管理哪个图标该在status bar上显示的策略。
 
 
贰:mediaServer服务进程

MediaServer服务基本上都是native的services,mediaServer进程也是在init.rc中启动的,它不是一个 daemon进程,这点容易搞混。他也是和systemserver进程类似的系统服务进程,提供应用进程的RPC调用的真正服务代码所运行的位 置。其服务都是和媒体录播放有关,主要有三个服务:
 
1,AudioFlinger
声音的录播放服务,包括混音等
位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/av/services/audioflinger/
 
2,MediaPlayerService
提供媒体播放服务,opencore是这块的核心模块,对java端的接口在mediaplayer.java
位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/av/media/libmediaplayerservice/
 
3,CameraService
提供camera的录制、preview等功能的服务
位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/av/services/camera/libcameraservice/
 
4,AudioPolicyService
主要功能有检查输入输出设备的连接状态及系统的音频策略的切换等。
位置/home/senrsl/android/source /WORKING_DIRECTORY/frameworks/av/services/audioflinger/

2015年05月12日13:53:03
--
senRsl
2015年05月11日18:03:23

没有评论 :

发表评论