AndroidのSystem Serviceの数を数える - ReDo

2013年2月 7日

AndroidのSystem Serviceの数を数える

System Servicesって結局どんくらいあるんだっけ、とふと思ったのできちんと追いかけてみる。

KMC Staff Blog:AndroidのSystemServerの起動シーケンス(メモ)
http://blog.kmckk.com/archives/3691425.html
Android アプリケーションが起動するまでの流れ
http://dsas.blog.klab.org/archives/52003951.html
Androidの仕組みについて教えてください
https://groups.google.com/forum/#!msg/android-group-japan/hvSiywdGnPM/3O2DVEZgvi8J

一応最新でどうなっているのかが気になるので、4.2で。

http://tools.oesf.biz/android-4.2.0_r1.0/xref/frameworks/base/cmds/system_server/library/system_init.cpp
変わらず2個。
Surface Flinger
Sensor Service


http://tools.oesf.biz/android-4.2.0_r1.0/xref/frameworks/base/services/java/com/android/server/SystemServer.java
おそらく以下の59個...ってそんなあるの!?
Entropy Mixer
Power Manager
Activity Manager
Display Manager
Telephony Registry
Scheduling Policy
Package Manager
User Service
Account Manager
Content Manager
System Content Providers
Lights Service
Battery Service
Vibrator Service
Alarm Manager
Init Watchdog
Input Manager
Window Manager
Bluetooth Manager Service
Input Method Service
Accessibility Manager
Mount Service
LockSettingsService
Device Policy
Status Bar
Clipboard Service
NetworkManagement Service
Text Service Manager Service
NetworkStats Service
NetworkPolicy Service
Wi-Fi P2pService
Wi-Fi Service
Connectivity Service
Network Service Discovery Service
Throttle Service
UpdateLock Service
Notification Manager
Device Storage Monitor
Location Manager
Country Detector
Search Service
DropBox Service
Wallpaper Service
Audio Service
Dock Observer
Wired Accessory Manager
USB Service
Serial Service
Twilight Service
UI Mode Manager Service
Backup Service
AppWidget Service
Recognition Service
DiskStats Service
SamplingProfiler Service
NetworkTimeUpdateService
CommonTimeManagementService
CertBlacklister
Dreams Service

http://tools.oesf.biz/android-4.2.0_r1.0/xref/frameworks/base/core/java/android/content/Context.java
Context.*_SERVICEだと46個の様です。

たいだい50個前後あるよ!とか言っておけば良い模様。


○余談:System Servicesとは

「XXXManagerとかXXXFlingerとか...」という教科書的な話ではなくて、具体的にどのようなものがSystem Serviceに分類されるのか、という話です。


※カタカナ表記は概念的なものを、英語表記は具体的な対象があるもの、用語として使われているもの、という使い分けです。

Androidをざっくり分けます。

A. アプリ
B. システムコア
C. ハード

システムコアをざっくり分けます。

B. システムコア
B-1. バックグラウンドなサービス・デーモンなプロセス
B-2. ライブラリ・呼びだされて機能するもの

AndroidはLinuxなのでKernelなそれとUserlandなそれに分けます。
さらにLinux Native層、Android層のそれに分けます。

B. システムコア
B-1. バックグラウンドなサービス・デーモンなプロセス
 ・System Service群
 ・Native daemon群
 ・Kernel
B-2. ライブラリ・呼び出されて機能するもの
 ・Framework(Dalvik/Java) Libraries
 ・Native Libraries
 ・Driver

有名なAndroidのスタック図ではFramework, Librariesは「バックグラウンドで動いているもの」と「呼び出されて機能するもの」は一緒になって書かれていますが、Androidに手を入れよう!と思った際にはこれらは(分かる範囲でも)明確に区別して覚える必要があります。

# 実態はAPIがライブラリの様にしか見えなくてもManager間通信をしていたりしていますが!

ここで上記に冒頭で紹介したサイトを参考に、Androidの起動プロセスざっくりと以下に示します。

1. Kernelが起きる
2. KernelがUserlandの最初のプロセスとしてinitを起こす
3. initが起動スクリプトinit*.rcを元にNative daemon群を起こす
4. initがアプリプロセスの始祖となるapp_process(zygote)を起こす
5. initがSystem Service群を実行するsystem_serverを起こす
6. System Service群がreadyになったらActivityManagerが大事なアプリから順番に起こす
7. 最後にあとは起きたいアプリは起きろよとBOOT_COMPLETEDのBroadcast Intentを投げる

起動順とは逆になりますが、乱暴に言うと、

「JavaとかC/Cppとかでのアプリのつくりを」
「アプリが呼び出すAPIを」
「APIの中身であるSystem ServicesとFramewok Librariesを」
「それらが関連するNative LibrariesとNative daemonsを」
「最終的に動作するDriverとKernelを」
「ブートとか通信とか周りの話を」
「動作するハードとかSoCとかペリフェラルとかを」

知れば、(エコシステムを除いたOSとしての狭義の)Androidについてはマスターしたということです。#無理

コメントする