Android/정리2009. 5. 6. 13:58


1. Bootloader : 기본적인 hw initialize
2. Load linux
3. Start kernel - /init/main.c
4. Android initialization process - /etc/init.rc
   -> Start android services: Colsole, adbd, service manager, debuggerd, mountd, rild, zygote, mediaserver, installd, flash_recovery

아래는 init.rc의 process를 도식화한것이다.

init : init.rc를 해석하여 수행하고 초기화한다.
       /dev노드 아래에 %hardware%.rc를 참조하여 디바이스노드를 생성해낸다.
console : shell을 시작한다.
service manager : binder IPC service manager를 시작한다.
mountd : 모든 filesystem을 마운트한다.
debuggerd : debug system을 시작한다.
rild : Radio Interface Layer daemon을 시작한다.
zygote : Android Java VM runtime을 시작하고 system server를 시작한다. 가장 중요한 프로세스이다.
media server : Audio/Surface flinger, MediaPlayerService, Camera service를 시작한다.
Installd : install package daemon을 시작한다.
      
  • 모든 안드로이드 어플리케이션은 zygote process에 의해 fork된다.
  • system_servier는 fork된 zygote에 의해 최초로 적재되는 특별한 프로세스이며 Core service들을 시작한다.
    • ActivityManager, WindowsManager, PackageManager, ...
  • 다른 안드로이드프로세스는 ActivityManagerService에 의해 생성된다.

더 자세한 정보를 원한다면 /frameworks/base/services/java/com/android/server/am/ActivityManagerService.java 와 /frameworks/base/core/java/android/os/Process.java

ActivityManagerService.systemReady에서 persistent application을 부팅시 시작하도록 되어 있다. 따라서 AndroidManifest.xml에서 아래와 같이 정의된 Application은 부팅시 실행된다.

 <application android:name="PhoneApp"
    android:persistent="true"
    android:label="@string/dialerIconLabel"
    android:icon="@drawable/ic_launcher_phone">

intent.CATEGORY_HOME으로 설정된 component가 적재된다.
intent.ACTION_BOOT_COMPLETED로 설정된 component가 부팅 완료후 적재된다.
receiver component중 android.enabled와 android.exported가 false이면 ACTION_BOOT_COMPLETED가 set되어 있더라도 적재되지 않는다.
<receiver android:name=".service.BootReceiver" android:enabled="false"
<receiver android:name=".DownloadReceiver" android:exported="false"> 




Posted by 삼스