Beginnning
PackageInstaller вызывает активность InstallAppProgress к принимает команду от пользователя. InstallAppProgress запросит PackageManager
Сервис для установки пакета через installd.Исходный код доступен по адресу <Android Source>/packages/apps/PackageInstaller
.
Когда мы устанавливаем APK
файл, менеджер пакетов синтаксический пакет (APK
) файл и экран подтверждения, когда пользователь нажмет кнопку OK, пакет вызова метода менеджер назвал installPackage
с этими четырьмя параметрами, а именно uri
, installFlags
, наблюдатель, installPackageName
. Менеджер пакетов запустил одну услугу с именем «пакет», теперь в этой службе происходят все нечеткие вещи. вы можете проверить PackageInstallerActivity.java
и InstallAppProgress.java
в исходном коде PackageInstaller. Служба диспетчера пакетов, работающая в процессе system_service, и установочный демон (installd), который запускается как собственный процесс, начинается с момента загрузки системы.
Где APK
Файлы хранятся в Android
?
- Pre-Install (то есть камера, календарь, браузер и т.д.).
APK
хранится в/системы/приложения/
- пользователя Установка (ApiDemo, Any.DO и т.д.) APK хранится в
/data/app/
- Package Manager создать каталог данных
/data/data/<package name>/
для хранения базы данных, общие предпочтения, родной библиотеки и данные кэша
Вы можете увидеть apk
файл и *.odex
файл же APK
, ODEX
Файл совершенно другой дискуссии и цели.
Что такое процесс установки APK?
Выполнение следующего процесса в Package Manager Service
.
- Ожидание
- Добавить пакет в очередь для процесса установки
- Определить соответствующее место установки пакета
- Определение установки Установить/обновить новый
- Копия файла APK в данный каталог
- Определить UID приложения
- Запрос на процесс демонстрации installd
- Создание приложения разрешений каталогов и набор
- Добыча DEX кода в каталог кэша
- Чтобы отразить и packages.list
/system/data/packages.xml
последний статус
- вещания в системе наряду с названием эффекта установки полный комплект
Intent.ACTION_PACKAGE_ADDED
: Если новый (Intent.ACTION_PACKAGE_REPLACED
): случай обновления.
Сколько хранить данные менеджера пакетов?
Менеджер пакетов хранит информацию о приложении в трех файлах, расположенных в /data/system
. Следующий образец извлекается из изображения эмулятора Android 4 ICS
.
packages.xml
: Этот файл содержит список разрешений и пакетов/приложений. Этот файл xml
хранит две вещи: 1. разрешения 2. пакет (приложение), разрешения хранятся под тегом <permissions>
. Каждое разрешение имеет три атрибута: имя, пакет и защиту. Атрибут имени имеет имя разрешения, которое мы используем в AndroidManifest.xml
, атрибут пакета указывает, что разрешение принадлежит пакету. В большинстве случаев «андроид» - это значения, поскольку тег <permission>
содержит разрешения по умолчанию и защита указывает уровень безопасности.
packages.list
: Это простой текстовый файл содержит имя пакета, идентификатор пользователя, флаг и каталог данных, я не могу найти идеальное описание, но я предполагаю, что packages.list
файла может обеспечить более быстрый поиск установленного пакета, потому что файл сохраняйте важную информацию.
com.android.launcher 10013 0 /data/data/com.android.launcher
com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox
com.android.contacts 10001 0 /data/data/com.android.contacts
com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin
packages-stoped.xml
: Этот файл содержит список пакетов, который остановленное состояние, очистной заявил приложение не может получить никакого вещания.
Где я могу найти исходный код диспетчера пакетов и установщика пакетов?
Package Manager
frameworks/base/services/java/com/android/server/pm/Settings.java
frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl
frameworks/base/services/java/com/android/server/pm/PackageSignatures.java
frameworks/base/services/java/com/android/server/pm/PreferredActivity.java
frameworks/services/java/com/android/server/PreferredComponent.java
frameworks/core/java/android/content/IntentFilter.java
frameworks/base/core/java/android/content/pm/PackageParser.java
frameworks/base/services/java/com/android/server/pm/Installer.java
frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl
frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
Installer Package
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java.
Ссылки на относящиеся: link 1 и link 2.
Одна вещь, на которую вы можете быть уверен: нет единого ответа. Особенно сейчас после переключения с Дальвика на АРТ. Вы когда-нибудь считали, что укореняете устройство и просто ищете то, что найдете? –
Вам не нужно запускать устройство, чтобы осмотреться. Подключите телефон к компьютеру и запустите 'adb shell'. Команды похожи на оболочку unix - например, вы можете ввести 'cd' и' ls'. Проверьте каталоги, например '/ data/app'. http://blog.shvetsov.com/2013/02/access-android-app-data-without-root.html – craig65535
Помимо поиска описания формата APK в вашей любимой вики - более новые материалы об ART были освещены на последний Google IO: https://youtu.be/EBlTzQsUoOw –