Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

app_process32
Запуск среды выполнения, затем запуск приложения

Тип файла: команда
  Eng  

usage: app_process [java-options] cmd-dir start-class-name [options]

   

Комментарии
Все до '-' или первого аргумента, отличного от '-', отправляется в виртуальную машину.

Из коментариев в исх. тексте:

  • Первый аргумент после аргументов виртуальной машины — это «родительский каталог», который в настоящее время не используется.

  • После родительского каталога ожидает один или несколько следующих внутренних аргументов:

    --zygote : Начать в режиме зиготы

    --start-system-server : Запустить системный сервер.

    --application : запуск в режиме приложения (автономный, не зиготный).

    --nice-name : Красивое имя для этого процесса.

  • Для запуска без зиготы за этими аргументами будет следовать имя основного класса. Все остальные аргументы передаются в основной метод этого класса.

  • Для запуска зиготы все оставшиеся аргументы передаются основной функции зиготы.

  • Обратите внимание, что мы должны скопировать значения строки аргумента,
    так как мы перезапишем весь блок аргумента, когда применим красивое имя к argv0.

  • В качестве исключения из вышеприведенного правила все, что содержится в «разделенных командах»,
    передается виртуальной машине, даже если в ней есть пробел


    Запуск Android Zygote

    Вот несколько различных заметок о запуске процесса zygote в Android.

    Последовательность шагов запуска Zygote:

  • init запускает программу C++ /system/bin/app_process и присваивает результирующему процессу имя «zygote».

    Это основано на строке из init.rc:
    служба zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

  • app_process выполняет и выполняет среду выполнения для класса dalvik

  • Использование: app_process [java-options] cmd-dir start-class-name [options]
    но вы можете указать --zygote вместо имени начального класса.

  • В случае загрузки используется --zygote
    источник для app_process находится в frameworks/base/cmds/app_process/app_main.cpp

    это программа для отладки самого zygote/dalvik

  • app_process выполняет 'runtime.start("com.android.internal.os.ZygoteInit", startSystemServer)

  • флаг startSystemServer передается в качестве параметра в app_process, чтобы указать, следует ли запускать системный сервер (да)

  • среда выполнения является экземпляром класса AppRuntime, который является подклассом AndroidRuntime.

    AndroidRuntime — основной класс для запуска среды выполнения dalvik.

    Источник находится в frameworks/base/core/jni/AndroidRuntime.cpp

    метод start() запускает виртуальную машину

    Выдается LOG_BOOT_PROGRESS_START с системным временем (SYSTEM_TIME_MONOTONIC)

    вызывается startVM()

    в конечном итоге вызывается callStaticVoidMethod(), чтобы фактически начать выполнение начального класса с помощью метода «main» в коде Dalvik.

    com.android.internal.os.ZygoteInit:main() начинает выполняться

    источник находится по адресу: frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

    профайлер запущен

    сокет Zygote зарегистрирован (для последующей связи для запуска приложений)

    классы и ресурсы предварительно загружены

    если startSystemServer установлен, то запускается системный сервер

    командная строка для системного сервера:

    --setuid=1000 --setgid=1000 \

    --setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,3001,3002,3003 \

    --capabilities=130104352,130104352 \

    --runtime-инициализация \

    --nice-name=системный_сервер \
    com.android.server.SystemServer

    класс, который начинает выполняться: com.android.server.SystemServer

    делается вызов Zygote.forkSystemServer(), чтобы фактически запустить этот другой процесс

    zygote работает в «режиме выбора цикла», когда один процесс вращается в ожидании связи для запуска последующих приложений.

    см. runSelectLoopMode()

    принимаются новые соединения (и помещаются в массив "peers")

    команда spawn, полученная по сети, выполняется вызовом метода runOnce()

    исходный код для этого находится по адресу: frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java.

    В конце концов, делается вызов Zygote.forkAndSpecialize(), который фактически выполняет разветвление

    Последовательность шагов запуска system_server (или SystemServer)

    Источник для SystemServer находится в: frameworks/base/services/java/com/android/server/SystemServer.java.

    в методе "ServerThread::run()" происходит следующий запуск:

    Выдается LOG_BOOT_PROGRESS_SYSTEM_RUN

    Запущено множество важных служб:
  • Служба энтропии
  • Менеджер питания
  • Менеджер активности
  • Реестр телефонии
  • Менеджер пакетов
  • Менеджер по работе с клиентами
  • Контент менеджер
  • Поставщики системного контента
  • Обслуживание батареи
  • Аппаратное обслуживание
  • Менеджер тревог
  • Служба датчиков
  • Оконный менеджер

    Также могут быть запущены дополнительные службы:
  • Статус бар
  • Служба буфера обмена
  • Служба метода ввода
  • Служба NetStat
  • Служба подключения
  • Менеджер специальных возможностей
  • Менеджер уведомлений
  • Служба монтирования
  • Монитор памяти устройства
  • Менеджер местоположения
  • Служба поиска
    Служба регистрации
    Сервис обоев
    Аудио Сервис
    Наблюдатель в гарнитуре
    Док-наблюдатель
    Служба резервного копирования
    Служба виджетов приложений