Начало
PackageInstaller вызывает действие InstallAppProgress для получения инструкции от пользователя. InstallAppProgress попросит PackageManager
Service установить пакет через installd. Исходный код доступен по адресу <Android Source>/packages/apps/PackageInstaller
.
Когда мы устанавливаем файл APK
, диспетчер пакетов анализирует файл пакета (APK
) и отображает подтверждение. Когда пользователь нажимает кнопку «ОК», диспетчер пакетов вызывает метод с именем installPackage
с этими четырьмя параметрами, а именно uri
, installFlags
, наблюдатель, installPackageName
. Диспетчер пакетов запускает одну службу с именем «пакет», теперь в этой службе происходят все нечеткие вещи. вы можете проверить PackageInstallerActivity.java
и InstallAppProgress.java
в исходном коде PackageInstaller. Служба диспетчера пакетов, работающая в процессе system_service, и демон установки (installd), который запускается как собственный процесс, запускаются во время загрузки системы.
Где APK
файлов хранится в Android
?
- Предварительная установка (например, камера, календарь, браузер и т. д.)
APK
хранится в /system/app/
- Пользовательская установка (ApiDemo, Any.do и т. д.) APK, хранящаяся в
/data/app/
- Диспетчер пакетов создает каталог данных
/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
): в случае обновления.
![введите здесь описание изображения](https://i.stack.imgur.com/3HBka.jpg)
Как диспетчер пакетов хранит данные?
Диспетчер пакетов хранит информацию о приложении в трех файлах, расположенных в /data/system
. Следующий образец извлечен из образа эмулятора Android 4 ICS
.
packages.xml
: Этот файл содержит список разрешений и пакетов/приложений. В этом файле xml
хранятся две вещи: 1. разрешения 2. пакет (приложение), разрешение хранится под тегом <permissions>
. Каждое разрешение имеет три атрибута, а именно имя, пакет и защиту. Атрибут имени имеет имя разрешения, которое мы используем в AndroidManifest.xml
, атрибут пакета указывает, что разрешение принадлежит пакету. В большинстве случаев «android» является значением, поскольку тег <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
: этот файл содержит список пакетов, которые находятся в остановленном состоянии, заявленные приложения Stope не могут принимать какие-либо трансляции.
Где я могу найти исходный код диспетчера пакетов и установщика пакетов?
Диспетчер пакетов
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
Установщик пакетов
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.
Ссылки: ссылка 1 и ссылка 2.
person
Yurets
schedule
22.05.2015
adb shell
. Команды аналогичны оболочке unix - например. вы можете ввестиcd
иls
. Проверьте каталоги, такие как/data/app
. blog.shvetsov.com/2013/02/ - person craig65535   schedule 20.05.2015