Packageinstaller что это за программа на андроид
Механизм управления пакетами Android (два) PackageInstaller устанавливает APK
Предисловие
В предыдущей статье этой серииМеханизм управления пакетами Android (1) Инициализация PackageInstallerВ этой статье мы узнали, как инициализируется PackageInstaller. В этой статье мы продолжаем изучать, как PackageInstaller устанавливает APK. Исходный код этой серии статей основан на Android8.0.
1. Обработка в PackageInstaller
Сразу после содержания предыдущей статьи, после того как PackageInstallerActivity вызовет метод startInstallConfirm для инициализации интерфейса подтверждения установки, пользователю будет представлен интерфейс подтверждения установки. Если пользователь хочет установить приложение, он нажмет кнопку OK, и будет вызван метод onClick для PackageInstallerActivity. ,Следующим образом. packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
В методе onClick кнопки OK и Cancel обрабатываются отдельно, и в основном просматривается обработка кнопки OK. Метод startInstall вызывается в примечании 1: packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
Метод startInstall используется для перехода к действию InstallInstalling и закрытия текущего PackageInstallerActivity. InstallInstalling в основном используется для отправки информации о пакете диспетчеру пакетов и обработки обратных вызовов управления пакетами. Метод установки установки onCreate показан ниже. packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
Uri пакета и протоколы содержимого будут обрабатываться отдельно в методе onCreate.Посмотрим на часть обработки Uri протокола содержимого. Примечание 1. Если значение savedInstanceState не равно нулю, получите ранее сохраненные mSessionId и mInstallId, где mSessionId - это идентификатор сеанса установочного пакета, а mInstallId - идентификатор ожидающего события установки. Примечание 2: зарегистрируйте наблюдателя с помощью InstallEventReceiver в соответствии с mInstallId, launchFinishBasedOnResult получит обратный вызов события установки, а текущее действие (InstallInstalling) будет закрыто независимо от успеха или неудачи установки. Если значение savedInstanceState равно null, логика кода аналогична. Примечание 3 создает SessionParams, который используется для представления параметров сеанса установки, а примечания 4 и 5 выполняют упрощенный синтаксический анализ пакета (APK) в соответствии с mPackageUri и анализируют его. Параметры присваиваются SessionParams. Примечание 6 и примечание 2 аналогичны регистрации наблюдателя в InstallEventReceiver для возврата нового mInstallId, где InstallEventReceiver наследуется от BroadcastReceiver и используется для получения событий установки и обратного вызова EventResultPersister. Примечание 7. Метод createSession пакета PackageInstaller будет внутренне взаимодействовать с PackageInstallerService через IPackageInstaller и PackageInstallerService. Последний вызов - это метод createSession пакета PackageInstallerService для создания и возврата mSessionId. Метод onCreate в InstallInstalling анализирует это, а затем проверяет метод onResume в InstallInstalling: packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
Примечание 1. Для получения SessionInfo в соответствии с mSessionId, SessionInfo представляет подробную информацию о сеансе установки. Примечание 2: Если sessionInfo не равно Null и не активен, создайте и выполните InstallingAsyncTask. Метод doInBackground в InstallingAsyncTask запишет информацию APK в PackageInstaller.Session в виде потока ввода-вывода в соответствии с Uri пакета (APK). Метод onPostExecute для InstallingAsyncTask показан ниже. packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
Создал PendingIntent и отправил IntentSender PendingIntent с помощью метода фиксации PackageInstaller.Session в примечании 1. Куда он пропал? Затем посмотрите на метод фиксации PackageInstaller.Session. frameworks/base/core/java/android/content/pm/PackageInstaller.java
Тип mSession - IPackageInstallerSession, что означает, что межпроцессное взаимодействие должно осуществляться через IPackageInstallerSession, и, наконец, будет вызван метод фиксации PackageInstallerSession, чтобы логика кода достигла уровня инфраструктуры Java.
2. Обработка уровня инфраструктуры Java
frameworks/base/services/core/java/com/android/server/pm/PackageInstallerSession.java
Получите наблюдатель mRemoteObserver типа IPackageInstallObserver2 в Примечании 1, а метод commitLocked в Примечании 2 показан ниже. frameworks/base/services/core/java/com/android/server/pm/PackageInstallerSession.java
Метод commitLocked относительно длинный. Здесь перехватывается самая важная информация и вызывается метод installStage PMS, так что логика кода входит в PMS. Вернемся к методу handleMessage mHandlerCallback, если метод CommitLocked имеет исключение PackageManagerException, будет вызван метод dispatchSessionFinished из примечания 3, и его реализация выглядит следующим образом: frameworks/base/services/core/java/com/android/server/pm/PackageInstallerSession.java
Примечание 1 вызовет метод onPackageInstalled для IPackageInstallObserver2, который реализован в классе PackageInstallObserver: frameworks/base/core/java/android/app/PackageInstallObserver.java
Примечание 1 вызывает метод onPackageInstalled для PackageInstallObserver, класс, реализующий этот метод, является подклассом PackageInstallObserver, вышеупомянутого PackageInstallObserverAdapter. Подводя итог, можно сказать, что метод dispatchSessionFinished будет вызывать обратно информацию об исключении PackageManagerException, которая появляется в методе Complete, в PackageInstallObserverAdapter через метод onPackageInstalled mRemoteObserver.
3. Резюме
В этой статье объясняется процесс установки APK PackageInstaller, вкратце, это два шага:
- Информация APK записывается в PackageInstaller.Session в виде потока ввода-вывода.
- Вызовите метод фиксации PackageInstaller.Session, чтобы передать информацию APK в PMS для обработки.
Поскольку обработка установки APK в PMS более сложна, обработка PMS будет объяснена в следующей статье этой серии.
com.google.android.packageinstaller (GooglePackageInstaller) — отвечает за установку приложений Android, используется магазином Play Store для установки/удаления/обновления приложений на вашем устройстве.
Присутствует в стоковом Android начиная с версии 4.4.
Является системным/основным компонентом, соответственно удалять нельзя.
Другими словами com.google.android.packageinstaller может быть замечен при инсталляции приложений. Чтобы проверить, какие были установлены — откройте Google Play, перейдите в раздел Мои приложения и игры, выберите Все. Дальше можете просмотреть все последние приложения, установленные на ваш телефон. Может появляться в списке активности возможно из-за включенного обновления Google PlayStore.
В справочной информации Android сказано — в случае когда интернет-трафик платный, то можно заблокировать доступ в интернет для Google Play. Блокировать необходимо следующие пакеты:
- com.android.packageinstaller
- com.android.vending
- com.google.android.gms
- com.google.android.packageinstaller
Можно сделать вывод:
- com.google.android.packageinstaller точно относится к Google Play.
- Можно заблокировать доступ в интернет, но тогда пакет возможно будет чаще появляться в списке активности и пытаться установить коннект.
- Исходя из двух вышеперечисленных пунктов, возможно пакет можно и вовсе заморозить. Для этого можно использовать Titanium Backup, но необходимы root-права. Однако последствия — непредсказуемы, могут быть ошибки на этапе загрузки Андроида.
Можно ли удалить?
Возможно правда, что пакет нужен для установки приложений именно из маркета. Будет ли устанавливаться apk-файлы без этого пакета? Нужно проверять, как раз для этого и можно использовать Titanium Backup — заморозить и протестировать.
Вывод — не стоит отключать/морозить/удалять данное приложение!
По поводу ошибки
У одного пользователя была ошибка — он устанавливал Андроид 6, далее при установке любого apk — ошибка в приложении, вот комментарий человека:
Потом человек написал решение:
Так что если у вас также будет похожая ошибка — данное решение может помочь и вам.
Приветствую. Android — операционная система с множеством предустановленных программ, компонентов, служб. Некоторые можно безопасно отключить, однако другие — критически важны.
Установщик пакетов Xiaomi — что это?
Системная служба Android установки программ при помощи apk-файлов. Внутри службы хранится небольшое количество информации, если служба повреждена — будет сбой разбора пакета, ошибка установки.
Действия при ошибке установки
Откройте настройки, далее выбираем Приложения:
Нажимаем три точки в правом верхнем углу — выбираем Системное ПО:
Нажимаем Остановка > Очистить кэш:
Важно: после очистки кэша может пропасть возможность откатить версию приложения на предыдущую.
Если все равно ошибка установки — можно попробовать обратиться в сервисный центр. Однако сперва скопируйте все важные данные на карту, в облако или на ПК, так как при восстановлении данные могут быть удалены.
Пример работы
В файловом менеджере файл-инсталлятор браузера Опера — opera-vpn-1-4-1.apk:
Если по нему нажать — будут предложены несколько действий, среди которых — Установщик пакетов:
Если выбрать — запустится процесс установки, появится кнопка Установить:
В итоге браузер Opera будет установлен через установщик, а не напрямую. Стандартно при открытии apk-файла (пакета) он и запускается, однако бывают ошибки, при которых стоит установить приложение именно через файловый менеджер.
Удалять/морозить нельзя — иначе потом не сможете устанавливать софт.
Действия при ошибке установки
Откройте настройки, далее выбираем Приложения:
Нажимаем Остановка > Очистить кэш:
Важно: после очистки кэша может пропасть возможность откатить версию приложения на предыдущую.
Пример работы
В итоге браузер Opera будет установлен через установщик, а не напрямую. Стандартно при открытии apk-файла (пакета) он и запускается, однако бывают ошибки, при которых стоит установить приложение именно через файловый менеджер.
В таких случаях рекомендуют чистить кэш.
Некоторые советы
Заключение
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
Установщик пакетов на Xiaomi (MIUI): что это за приложение?
Что такое установщик пакетов xiaomi?
Что такое установщик пакетов на моем телефоне Android?
Как включить установщик пакетов?
Как изменить установщик по умолчанию на Android?
Как найти скрытые приложения на Android?
- Коснитесь Настройки.
- Коснитесь Приложения.
- Выбрать все.
- Прокрутите список приложений, чтобы узнать, что установлено.
- Если что-то выглядит забавным, погуглите, чтобы узнать больше.
Какие приложения используют читеры?
Ниже вы можете найти несколько приложений, которые время от времени используют читеры для общения с любовниками:
Есть ли в Android менеджер пакетов?
Что такое скрытое меню Android?
Знаете ли вы, что в Android есть секретное меню для настройки пользовательского интерфейса системы вашего телефона? Он называется System UI Tuner, и его можно использовать для настройки строки состояния, часов и уведомлений приложений Android-гаджета.
Как остановить установщик пакетов?
Поскольку установщик пакетов встроен в ОС Android, обычный пользователь не может удалить установщик пакетов с устройства. Также нельзя удалить установщик пакетов с Android.
Что вызывает проблемы при синтаксическом анализе пакета?
Почему мой телефон сообщает о проблеме с синтаксическим анализом пакета?
Какой установщик APK для Android лучше всего?
Лучшие установщики APK для Android в 2019 году
Что такое установочный пакет?
Что приводит к тому, что приложения не устанавливаются?
Поврежденное хранилище, особенно поврежденные SD-карты, является одной из наиболее частых причин, по которой возникает ошибка, из-за которой приложение Android не установлено. Нежелательные данные могут содержать элементы, нарушающие место хранения, из-за чего приложение Android не может установить ошибку.
Прежде всего, давайте поговорим о нескольких способах установки apk, которые можно разделить на две категории в целом: один - установка интерфейса, другой - установка без интерфейса. Установка без интерфейса подразделяется на встроенную установку apk boot и установку команд. Установка команд делится на два типа: один тип установки на компьютер - это команда adb, а другой - установка на мобильный телефон, то есть команда pm. Сегодня мы в основном представляем интерфейс установки.
Конечно, мы начнем с этого интерфейса установки, какой это интерфейс? Это активность PackageInstallerActivity. Как это началось? Давайте посмотрим, как это определяется в AndroidManifest
Очевидно, что мы можем начать с действия android.intent.action.INSTALL_PACKAGE или начать с действия android.intent.action.VIEW плюс тип «application / vnd.android.package-archive», конечно же, нет Этот тип также может быть запущен, но много таких действий будет найдено. Кроме того, невозможно начать с имени класса или имени пакета. Итак, большинство стартапов такие
Здесь мы передаем данные, которые являются Uri pakFile, и затем мы переходим к onCreate PackageInstallerActivity, чтобы увидеть
Полученный Uri файла apkFile, который мы только что передали, дает mPackageURI, затем получает PackageManager и затем генерирует mPkgInfo, который является PackageParser.Package, что очень важно. Давайте посмотрим, как генерируется PackageParser.Package и что содержится в PackageParser.Package. Затем мы собираемся в PackageUtil.getPackageInfo
Создайте анализатор пакетов, используйте этот анализатор для получения данных, необходимых для PackageParser.Package, и сгенерируйте PackageParser.Package. Давайте посмотрим, как PackageParser.parsePackage генерирует PackageParser.Package. Здесь передаются четыре параметра: исходный файл, файл apk, путь apk, информация о экране и последний 0. Что вы делаете, вы можете ввести его. понимать
Сначала sourceFile.isFile () определяет, является ли это файл, если нет, возвращает, затем isPackageFilename (sourceFile.getName ()) определяет, является ли это файл apk, если нет, возвращают, затем переходят к получению трех ключевых переменных, то есть
Каковы эти три? Вот краткий доклад, менеджер активов AssetManager, используемый для управления ресурсами, полученными в пакете
Ключевое слово cookie, однозначно идентифицирующее активы пакета apk, можно получить через addAssetPath, то есть информацию о ресурсах пакета можно найти через cookie. Ресурсы - это ресурсы, включая изображения, цвета, XML и другие ресурсы.
Конечно, информация о ресурсах также получается через AssetManager. XmlResourceParser, как следует из названия, представляет собой анализатор файлов ресурсов Xml, используемый для анализа наших файлов XML
Это очевидно, генерируемый здесь анализатор ресурсов файла xml используется для анализа файла AndroidManifest. Следующий шаг - это ключ
Вот где фактически создается наш Пакет, то есть pkg = parsePackage (res, parser, flags, errorText). parsePackage - это изоморфная функция: один принимает File в качестве первого параметра, который мы сейчас анализируем, а другой принимает Resources в качестве первого параметра, о котором мы поговорим далее. Поскольку эта функция относительно велика, мы не будем перечислять их все , Выберите только основной
Получить имя пакета.
Проанализируйте и получите атрибуты нашего AndroidManifest, которые определены в attrs_manifest.xml в frameworks / base / core / res / res / values
Это переменная информация. Следующим шагом является большой цикл. Здесь есть больше проанализированного контента. Давайте приведем несколько общих примеров, таких как «приложение»
Содержащаяся в нем информация, такая как метка здесь, а также «активность», «получатель», «служба», «поставщик» и т. Д., С указанием родителя. Здесь, в качестве примера «активность», перейдите в frameworks / В attrs_manifest.xml под base / core / res / res / values это
Здесь много переменных. При определении активности некоторые использовались, а некоторые не использовались. Анализатор ресурсов файла Xml получает значение этой переменной из xml и затем выплачивает эти переменные; также есть «разрешение» «Разрешение, то есть
Вы часто будете видеть подобные вещи, есть также «группа разрешений», «использует-sdk» и т. Д. Те, кто заинтересован, могут изучить их один за другим. Со временем эта информация будет включена в наш пакет. Мы понимаем, что пакет здесь? Это материал, который содержит всю информацию в упаковке. На этом этапе наш пакет был сгенерирован, и затем мы возвращаемся к onCreate PackageInstallerActivity, а затем смотрим вниз, пропуская те, которые не важны.
Тогда вот startInstallConfirm (), который
На этом этапе наша активность PackageInstallerActivity считается завершенной. Здесь мы рассмотрим, как создается представление разрешения нашего интерфейса установки, то есть asp.getPermissionsView (), где AppSecurityPermissions (this, mPkgInfo) передается в двух параметрах, один из которых Контекст, один - это Пакет, который мы только что получили, давайте пойдем и посмотрим, файл находится в frameworks / base / core / java / android / widget
Список, который получает PermissionInfo, представляет собой mPermsList. Затем мы смотрим на asp.getPermissionsView (), который
Вот макет нашего разрешения View, который является макетом app_perms_summary.xml в frameworks / base / core / res / res / layout. Если мы хотим изменить разрешение VIew, мы должны начать здесь. Давайте посмотрим, как он генерируется, который является setPermissions (mPermsList)
Здесь нужно различать опасные типы карт, то есть разрешения класса PermissionInfo.PROTECTION_DANGEROUS или общие разрешения normalMap, а затем перейти к showPermissions ().
Мы присвоили отображаемый контент нашему макету. Я не буду объяснять здесь по одному. Давайте посмотрим на displayPermissions.
Я запустил другой файл acitvity, который называется InstallAppProgress, и последние несколько данных, в основном mPkgInfo.applicationInfo, который представляет собой ApplicationInfo, и mPackageURI, который является Uri для apkFile, и некоторые другие данные. Тогда мы идем на создание InstallAppProgress
Получить две переданные данные, а затем initView (), initView () - это инициализация некоторых макетов, не повторять их, а только перехватывать важные, то есть
pm это PackageManager, поэтому мы переходим к PackageManager.installPackage, installPackage PackageManager является абстрактной функцией, а конкретная реализация находится в PackageManagerService. Первый передаваемый здесь параметр уже известен, а второй - наблюдатель установки пакета.
Когда установка завершится, она перейдет к функции packageInstalled. Третий параметр - это флаг, который в основном определяет, была ли это первая установка или обновление было установлено. Третий параметр - это, очевидно, имя установленного пакета. Тогда мы идем, чтобы увидеть
То есть installPackageWithVerification
Этот, иди и посмотри
То есть processPendingInstall (mArgs, mRet)
Здесь запускается поток для установки, который
Это installPackageLI (args, true, res), здесь больше кодов, поэтому я не буду перечислять их все
Очевидно, что если это первая установка для установки NewPackageLI, если она должна заменить replacePackageLI, мы переходим к установке NewPackageLI
Другие должны судить, соответствует ли текущее местоположение условиям установки, то есть, если PackageManager.INSTALL_SUCCEEDED успешен, в случае успеха продолжит установку, в случае неудачи, переустановит или вернет. scanPackageLI - это функция рефакторинга. Одним из первых параметров является PackageParser.Package, а первым параметром - File. Давайте рассмотрим первый. Поскольку scanPackageLI является основным процессом установки пакетов, он имеет более 800 строк и проделал большую работу, необходимую для установки. Что вы делали во время установки? Если вам интересно, вы можете изучить его. Я не буду перечислять их здесь. Мы просто смотрим
mInstaller также является установщиком, так что посмотрите
Что касается его внешнего вида, то здесь выясняется, что Socket используется для связи. Сообщите серверу информацию о пакете, который мы хотим установить, и пусть сервер сделает все остальное. Этот сервер находится на нижнем уровне и выполнил некоторые задачи копирования и другие. Я не буду вдаваться в подробности.
Это было то же предложение, чтобы угодить мастерам и дать хорошую идею опоздавшим: не ругайте меня за спину и не благодарите Бога.
Читайте также: