Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Взгляд из песочницы

MOSDROID
September 18, 2017

Взгляд из песочницы

Мы посмотрим на то, как Android-приложение работает в контексте операционной системы и как оно взаимодействует с системными службами; а также узнаем, что скрыто за методами SDK.

#MOSDROID

MOSDROID

September 18, 2017
Tweet

More Decks by MOSDROID

Other Decks in Programming

Transcript

  1. Структура ОС Apps Application framework Native Userspace Linux kernel System

    apps User apps API Java core Android Framework Libraries System services Binder Dalvik/Android runtime/Zygote JNI
  2. Иерархия процессов Kernel init installd servicemanager adbd zygote . .

    . Daemons App1 App2 system_server phone System process App process
  3. Запуск ОС BootLoader •Поддержка основного оборудования •Поиск и загрузка ядра

    •Загрузка в режиме восстановления (основные драйверы)
  4. Запуск ОС Kernel • Инициализация MMU и I/O • Инициализация

    демонов и поток ядра • Монтирование корневой файловой системы • Инициализация драйверов • Запуск пользовательского процесса init
  5. Запуск ОС init • Ключевой процесс инициализации Android • Выполнение

    app_process, запуск VM (Zygote) • Запуск нативных демонов • Запуск system_server
  6. Запуск ОС Zygote • Запуск Android runtime • запуск VM

    • загрузка ресурсов • запуск system_server (forkSystemServer) • загрузка Java классов • Запуск профилировщика • Регистрация сокета • Выполнение ZygoteInit
  7. Запуск ОС system_server • инициализация сервисов • регистрация в service

    manager • запуск activity manager • запуск package manager • запуск window manager • запуск power manager
  8. Запуск приложения Zygote App Dalvik/ART Загруженные классы Загруженные ресурсы Dalvik/ART

    Загруженные классы Загруженные ресурсы Ресурсы и классы приложения copy-on-write
  9. Binder •Драйвер ядра для обеспечения IPC •Легковесный RPC •Пул потоков

    для обработки запросов •Поддержка передачи файловых дескрипторов •Синхронный и асинхронный вызов методов •Синхронное взаимодействие между потоками
  10. Взаимодействие со службами App proc system server service manager App

    PackageManager PackageManagerService package Binder IPC Binder IPC
  11. Взаимодействие со службами App proc system server service manager App

    PackageManager PackageManagerService package Binder IPC Binder IPC Binder IPC
  12. Activity Manager •Запуск activity и service •Получение поставщиков данных •Рассылка

    интентов •Обслуживание OOM adj •Управление жизненным циклом •Управление тасками •Обработка ANR •Разрешения
  13. Activity ActivityManager system_server proc App1 proc App1Activity ActivityRecord (App1Activity) Stopped

    Task: App1 App2 proc App2Activity ActivityRecord (App2Activity) Resumed Task: App2 Saved state
  14. Activity ActivityManager system_server proc ActivityRecord (App1Activity) Stopped Task: App1 App2

    proc App2Activity ActivityRecord (App2Activity) Resumed Task: App2 Saved state
  15. ActivityManager system_server proc App1 proc App1NewActivity ActivityRecord (App1Activity) Stopped Task:

    App1 App2 proc App2Activity ActivityRecord (App1NewActivity) Resumed Task: App2 Saved state ActivityRecord (App2Activity) Stopped Saved state
  16. ActivityManager system_server proc App1 proc App1Activity App2 proc App2Activity ActivityRecord

    (App1Activity) Resumed Task: App1 Task: App2 ActivityRecord (App2Activity) Stopped Saved state ActivityRecord (App2Activity) Stopped Saved state App1NewActivity
  17. Binding ActivityManager system_server proc App1 proc AppService ServiceRecord (AppService) Stopped

    App2 proc IBinder IBinder IBinder bind create IBinder IBinder call
  18. Broadcast Receiver ActivityManager system_server proc App1Receiver (App1) BroadcastRecord ACTION_AIRPLANE_MODE_CHANGED App2Receiver

    (App2) App3Receiver (App3) App1 proc App1Receiver App2 proc App2Receiver App3 proc App3Receiver
  19. Content Provider ActivityManager system_server proc ProviderRecord (DataProvider) App2 proc IBinder

    ContentResolver IContentProvider.Proxy query App1 proc DataProvider IContentProvider.Stub
  20. Content Provider ActivityManager system_server proc ProviderRecord (DataProvider) App2 proc IBinder

    ContentResolver IContentProvider.Proxy query lookup authority App1 proc DataProvider IContentProvider.Stub
  21. Content Provider ActivityManager system_server proc App1 proc DataProvider ProviderRecord (DataProvider)

    App2 proc IBinder IContentProvider.Stub ContentResolver IContentProvider.Proxy query lookup authority create
  22. Content Provider ActivityManager system_server proc App1 proc DataProvider ProviderRecord (DataProvider)

    App2 proc IBinder IContentProvider.Stub ContentResolver IContentProvider.Proxy query lookup authority create IBinder
  23. Content Provider ActivityManager system_server proc App1 proc DataProvider ProviderRecord (DataProvider)

    App2 proc IBinder IContentProvider.Stub ContentResolver IContentProvider.Proxy query lookup authority create IBinder IBinder
  24. Content Provider ActivityManager system_server proc App1 proc DataProvider ProviderRecord (DataProvider)

    App2 proc IBinder IContentProvider.Stub ContentResolver IContentProvider.Proxy query lookup authority create IBinder IBinder query
  25. Android Permissions Реализованы на разных уровнях •Kernel •Native service •Framework

    Paranoid networking Filesystem permissions Проверки на уровне UID и GID PackageManager ActivityManager
  26. Android Permissions PackageManager system_server proc App proc AppActivity Gallery App

    proc PicturesProvider UID App2 granted permissions READ_PICTURES Authority: “pics” content://pics/1
  27. Android Permissions PackageManager system_server proc App proc AppActivity Gallery App

    proc PicturesProvider UID App2 granted permissions READ_PICTURES Authority: “pics” content://pics/1 checkPermission
  28. Android Permissions PackageManager system_server proc App proc AppActivity Gallery App

    proc PicturesProvider UID App2 granted permissions READ_PICTURES Authority: “pics” content://pics/1 checkPermission granted
  29. Android Permissions PackageManager system_server proc App proc AppActivity Gallery App

    proc PicturesProvider UID App2 granted permissions READ_PICTURES Authority: “pics” content://pics/1 checkPermission granted data