Подтвердить что ты не робот

Android: ознакомление с процессом установки APK

Я пытаюсь понять процесс установки apk на Android, в частности, эмулятор Android SDK через adb install (где я тестирую).

В поиске я не нашел удовлетворительного ответа за пределами "apk просто скопирован в /data/app и установлен при его запуске. Это неудовлетворительно для меня, поскольку оно не объясняет, как значок apk появляется на меню среди других вопросов.

Исходя из фона Windows, запуск .exe или установщика для установки программы изменяет реестры, файлы, службы и т.д. Мне нужно понять, происходит ли это или что-то подобное, когда apk установлен на Android.

Итак, если кто-нибудь может объяснить мне, что происходит специально, когда apk установлен на Android, я бы очень признателен.

На стороне примечания я также хотел бы узнать, задействован ли Dalvik VM "zygote" в установке или происходит ли это на более низком уровне ядра Linux?

Моя конечная цель - использовать strace to caputer для процесса установки apk для документирования изменений в системе, создания файлов, сетевой активности и других интересных событий.

4b9b3361

Ответ 1

В основном есть две категории приложений для Android.

  • Системные приложения: установлены при инициализации системы
  • Пользовательские приложения: установлены из Play Store, используя ADB или копируя файл .apk на SD-карту.

Ниже приведены пошаговые инструкции по установке.

  • Анализируется AndroidManifest.xml, информация извлекается и сохраняется в /data/system/packages.xml и/data/system/packages.list
  • .apk файл копируется в конкретный каталог, и для этого приложения создается каталог для хранения данных.

Разбор XML, анализ ресурсов и копирование файла .apk выполняются с помощью

PackageManageService.java

однако создание каталога выполняется

installd.c

PackageManageService.java связывается с installd.c через локальный сокет, расположенный в /dev/socket/installed

Пакет, в котором скопирован файл .apk, отличается для системных приложений и пользовательских приложений. для системных приложений

/система/приложение/

Где для файла appap. app, скопированного в файл .apk, копируется в

/данные/приложение

.dex файл, который извлекается из файла .apk, копируется в /data/dalvik -cache/.

Менеджер пакетов создает каталог данных/данные/данные//для хранения базы данных, общих предпочтений, собственной библиотеки и данных кеша

Ответ 2

Все, что вам нужно знать, это http://developer.android.com/tools/building/index.html, и здесь лучше понять изображение. Вы также можете google об инструменте aapt и .dex, чтобы понять больше, потому что classes.dex является подстрокой вашего приложения - содержит java и классы, скомпилированные. Один файл dex содержит несколько классов, в отличие от файла класса java, который содержит только один класс. Файл dex - это байт-код Java, преобразованный с помощью инструмента DX, который является неотъемлемой частью Android SDK. В результате это позволяет каждому приложению запускаться как собственный процесс с собственным экземпляром виртуальной машины Dalvik. apk

Ответ 3

Это выполняется на двух уровнях 1.) PackageInstaller (UI) с помощью команды отправки пакета PackageManagerService (System service) во вторую часть (Installd) 2.) Installd - это демон, который фактически устанавливает apk. Installd и PackageManagerService обмениваются данными с использованием сокетов. Сокет используется сам по себе. Вы можете обратиться к init.rc для создания сокета в init.