0
点赞
收藏
分享

微信扫一扫

android framework 层服务 分析


android framework层服务 是android启动时由systemServer ini2阶段的第一个java线程ServerTHread 初始化的,包括:

framesorks/base/services/java/com/android/server/SystemServer.java
public static final void init2() {
Slog.i(TAG, "Entered the Android system server!");
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();
}
ServerThread#run
- Entropy Service
- Power Manager
- Activity Manager
- Telephony Registry
- Package Manager
- Account Manager
- Content Manger
- System Content Providers
- Battery Service
- Lights Service
- Vibrator Service
- Alarm Manager
- Init Watchdog
- Window Manager
- Bluetooth Service
- Device Policy
- Status Bar
- Clipboard Service
- Input Method Service
- NetStat Service
- NetworkMnagement Service
- Connectivity Service
- Throttle Service
- Accessibility Manager
- Mount Service
- Notification Manager
- Device Storage Monitor
- Location Manager
- Search Service
- DropBox Service
- Wallpaper Service
- Audio Service
- Headset Observer
- Dock Observer
- USB Observer
- UI Mode Manager Service
- Backup Service
- AppWidget Service
- Recognition Service
- DiskStats Service

大部分服务都启动一个java线程在后台运转。

android framework层服务代码路径

android/frameworks/base/services

包含java层和jni层,有些服务需要访问硬件抽象层而需要jni层,jni提供给java层接口,java层最终生成service.jar,service.jar 依赖android.policy.jar,作为framework一部分存在。

jni通过c++访问硬件抽象层(libhardware),获取硬件功能,比如按键事件通过EventHub.cpp 提供硬件抽象层接口。

jni层生成动态库libandroid_servers.so

此库包含的服务如下:

    com_android_server_AlarmManagerService.cpp  //闹铃提醒服务

    com_android_server_BatteryService.cpp       //电源服务

    com_android_server_KeyInputQueue.cpp        //按键事件服务

    com_android_server_LightsService.cpp        //各种灯服务

    com_android_server_SensorService.cpp        //传感器服务

    com_android_server_SystemServer.cpp         //系统服务

    com_android_server_VibratorService.cpp      //步进电机服务

onlaod.cpp中 调用上面注册接口,加载动态库时调用JNI_Onload 初始化本地调用的绑定。

libandroid_servers.so 初始化时机:

由SystemServer进程加载,SystemServer 是虚拟机启动后运行的第一个java进程,SystemServer 代码位置 :

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

加载完libandroid_servers.so后调用init1(system_init)初始化一些c/C++系统服务(media,camera等),

init2(ServerThread)创建java线程启动上面提到的java层各种服务(runtime->callStatic("com/android/server/SystemServer", "init2");)

在加载libandroid_servers.so时会调用JNI_OnLoad 函数,注册上面提到的各种jni 层服务(闹铃,电源等)。

android framework层添加自己服务方式:

根据需要有几种方式,

1. 如果服务不依赖底层库,可以直接在java层添加

2. 如果依赖外部c/c++库,则需要提供jni,在 android/frameworks/base/services/jni下对应添加jni层服务

3. 如果依赖硬件,则需要添加硬件抽象层接口和jni层,最终添加java层。

需要注意的是,上面提到的服务是在android系统启动过程中就启动的服务,包括上面提到的三种方式,所以如果你想在系统启动时就提供类似的服务,

最好按照这种方式添加你的服务.

关于怎样添加服务 看这里

​​http://www.androidenea.com/2009/12/adding-system-server-to-android.html​​

举报

相关推荐

0 条评论