Intereting Posts
Как установить текст подчеркивания в текстовом режиме? Перемещение полосы прокрутки ListView с заполнением Есть ли скриптовый язык, который я могу встроить в свое приложение Java на Android Передача вложенного класса <MyInterface <T >> в качестве параметра в Android Как установить максимальную высоту с содержимым обертки в android? Приложение AChartengine неожиданно остановилось. Пожалуйста, попробуйте еще раз Расширение размера экземпляра виртуального устройства Android (эмулятора)? Синхронизация данных между Android-приложением и веб-сервером Как вы управляете пользовательской документацией для приложения для Android? Как установить переменную среды ANDROID_SDK_HOME? Зарегистрировать новый тип файла в Android Как WebView наследует цвета от текущей темы Android? Присоединитесь к процессу Android от Qt Creator Действия Android, которые переопределяемые функции должны вызывать супер. * Запуск приложений, содержащих большой объем кода

Как обновления приложений для Android работают технически?

Может кто-нибудь объяснить или указать ресурсы, где я могу прочитать, как обновления приложений Android действительно работают на уровне ОС?

Solutions Collecting From Web of "Как обновления приложений для Android работают технически?"

Из журналов диспетчера пакетов, кажется, следующие шаги для обновления:

1) Загрузите пакет во временное место.

Act = android.intent.action.PACKAGE_NEEDS_VERIFICATION dat = file: ///data/app/vmdl1854135520.tmp typ = application / vnd.android.package-archive

2) Сделайте проверку пакета.

06-30 17: 59: 02.751 3701 3751 D PackageManager: [MSG] PACKAGE_VERIFIED: observer {237546897}

3) Переименуйте пакет.

06-30 17: 59: 03.361 3701 3751 D PackageManager: переименование /data/app/vmdl1854135520.tmp в /data/app/com.vzw.hss.myverizon-1

4) Убить существующее приложение

06-30 17: 59: 03.361 3701 3751 D PackageManager:! @killApplicatoin: 10031, заменить sys pkg

5) Dexopt the apk

06-30 17: 59: 03.381 3701 3751 D PackageManager: Запуск dexopt on: /data/app/com.vzw.hss.myverizon-1/base.apk pkg = com.vzw.hss.myverizon isa = arm64 vmSafeMode = false interpret_only = ложь

**06-30 17:59:02.741 3701 3751 D PackageManager: [VERIFY] Found 1 verifiers for intent Intent { act=android.intent.action.PACKAGE_NEEDS_VERIFICATION dat=file:///data/app/vmdl1854135520.tmp** typ=application/vnd.android.package-archive flg=0x10000001 } with 0 optional verifiers 06-30 17:59:02.741 3701 3751 D PackageManager: [VERIFY] sendOrderedBroadcastToRequiredVerifier: 06-30 17:59:02.741 3701 3751 D PackageManager: PackageVerificationState{ 06-30 17:59:02.741 3701 3751 D PackageManager: verifier packages=com.android.vending(10034), 06-30 17:59:02.741 3701 3751 D PackageManager: intent=Intent { act=android.intent.action.PACKAGE_NEEDS_VERIFICATION dat=file:///data/app/vmdl1854135520.tmp typ=application/vnd.android.package-archive flg=0x10000001 (has extras) } 06-30 17:59:02.741 3701 3751 D PackageManager: others=28, false, false, false, false, false 06-30 17:59:02.741 3701 3751 D PackageManager: } 06-30 17:59:02.741 3701 3751 D PackageManager: remove MCS_UNBIND message and Posting MCS_UNBIND 10 secs later 06-30 17:59:02.751 3701 3701 D PackageManager: [VERIFY] onReceive for RequiredVerifier id=28 06-30 17:59:02.751 3701 3701 D PackageManager: [VERIFY] send delayed message for CHECK_PENDING_VERIFICATION after : 10000 06-30 17:59:02.751 3701 4589 D PackageManager: [VERIFY] verifyPendingInstall(28, VERIFICATION_ALLOW), uid=10034 06-30 17:59:02.751 3701 3751 D PackageManager: [MSG] PACKAGE_VERIFIED: observer{237546897} 06-30 17:59:02.751 3701 3751 D PackageManager: [VERIFY] PACKAGE_VERIFIED: 06-30 17:59:02.751 3701 3751 D PackageManager: PackageVerificationState{ 06-30 17:59:02.751 3701 3751 D PackageManager: verifier packages=com.android.vending(10034), 06-30 17:59:02.751 3701 3751 D PackageManager: intent=Intent { act=android.intent.action.PACKAGE_NEEDS_VERIFICATION dat=file:///data/app/vmdl1854135520.tmp typ=application/vnd.android.package-archive flg=0x10000001 cmp=com.android.vending/com.google.android.vending.verifier.PackageVerificationReceiver (has extras) } 06-30 17:59:02.751 3701 3751 D PackageManager: others=28, false, false, false, false, false 06-30 17:59:02.751 3701 3751 D PackageManager: } 06-30 17:59:02.751 3701 3751 D PackageManager: [VERIFY] broadcastPackageVerified(28, VERIFICATION_ALLOW, file:///data/app/vmdl1854135520.tmp) 06-30 17:59:02.761 3701 3751 D PackageManager: /data/app/vmdl1854135520.tmp already staged; skipping copy 06-30 17:59:02.761 3701 3751 D PackageManager: remove MCS_UNBIND and Posting MCS_UNBIND 06-30 17:59:02.761 3701 3751 D PackageManager: [MSG] PROCESS_PENDING_INSTALL: observer{237546897} 06-30 17:59:02.761 3701 3751 D PackageManager: currentStatus{1} 06-30 17:59:02.761 3701 3751 D PackageManager: installPackageLI: path 06-30 17:59:03.321 3701 3751 W PackageManager: verifying app can be installed or not **06-30 17:59:03.361 3701 3751 D PackageManager: Renaming /data/app/vmdl1854135520.tmp to /data/app/com.vzw.hss.myverizon-1** **06-30 17:59:03.361 3701 3751 D PackageManager: replacePackageLI** **06-30 17:59:03.361 3701 3751 D PackageManager: !@killApplicatoin: 10031, replace sys pkg** 06-30 17:59:03.371 3701 3751 W PackageManager: Trying to update system app code path from /system/priv-app/MyVerizon to /data/app/com.vzw.hss.myverizon-1 06-30 17:59:03.371 3701 3751 I PackageManager: scanFileNewer : com.vzw.hss.myverizon **06-30 17:59:03.381 3701 3751 D PackageManager: Running dexopt on: /data/app/com.vzw.hss.myverizon-1/base.apk pkg=com.vzw.hss.myverizon isa=arm64 vmSafeMode=false interpret_only=false** 06-30 17:59:06.861 3701 3751 I PackageManager: do mInstaller.dexopt : 0 06-30 17:59:06.861 3701 3751 D PackageManager: Time to dexopt: 3.482 seconds 06-30 17:59:06.861 3701 3751 D PackageManager: !@killApplicatoin: 10031, update pkg 06-30 17:59:06.861 3701 3751 W PackageManager: Code path for pkg : com.vzw.hss.myverizon changing from /system/priv-app/MyVerizon to /data/app/com.vzw.hss.myverizon-1 06-30 17:59:06.861 3701 3751 W PackageManager: Resource path for pkg : com.vzw.hss.myverizon changing from /system/priv-app/MyVerizon to /data/app/com.vzw.hss.myverizon-1 06-30 17:59:06.961 3701 3751 D PackageManager: New package installed 06-30 17:59:06.971 3701 3751 I PackageManager: Un-granting permission android.permission.sec.ENTERPRISE_DEVICE_ADMIN from package com.samsung.mdmtest1 (protectionLevel=2 flags=0x89be44) 06-30 17:59:06.971 3701 3751 I PackageManager: Un-granting permission com.sec.enterprise.knox.permission.KNOX_ENTERPRISE_BILLING from package com.samsung.mdmtest1 (protectionLevel=2 flags=0x89be44) 06-30 17:59:07.141 3701 3751 D PackageManager: doPostInstall for uid{10031} 06-30 17:59:07.151 3701 3751 D PackageManager: [MSG] MCS_UNBIND 06-30 17:59:07.151 3701 3751 D PackageManager: [MSG] POST_INSTALL: observer{237546897} 06-30 17:59:07.151 3701 3751 D PackageManager: Handling post-install for 29 06-30 17:59:07.661 3701 3751 D PackageManager: result of install: 1{237546897} 

Я не могу найти хороший ресурс, но вот что я понимаю о процессе.

APK хранятся в приватном каталоге телефона, когда они установлены. Когда происходит обновление, новый APK загружается из магазина, а затем старый APK заменяется новым. Новый AndroidManifest анализируется и устанавливается так, как если бы он был новой установкой, и проверяет наличие версии, ключа подписи и т. Д., Чтобы убедиться, что обновление разрешено. Фактические данные приложения хранятся в отдельном месте и не затрагиваются во время обновления. Если вы измените схему базы данных или что-то еще, вам нужно будет перенести данные при первом запуске.

Источник: http://java.dzone.com/articles/depth-android-package-manager

Я не уверен, что это то, что вам нужно, но самое лучшее, что я мог найти, это.

API-интерфейс диспетчера пакетов отвечает за управление установкой, удалением и обновлением файлов APK.

Он вызывает метод «InstallPackage» с параметрами «uri», «installFlags», «observer» и «InstallPackageName», затем запускает службу с именем «package», которая фактически устанавливает / обновляет ее.

Служба диспетчера пакетов запускается в процессе system_service, а установка daemon (installd) выполняется как собственный процесс. Оба запускаются при загрузке системы.

Обзор процесса:

  • Ожидание;
  • Добавьте пакет в очередь для процесса установки;
  • Определите подходящее место установки пакета;
  • Определение установки Установка / обновление
  • Скопируйте файл APK в данный каталог;
  • Определите UID приложения;
  • Запросить процесс installd daemon;
  • Создайте каталог приложений и установите разрешения;
  • Извлечение кода dex в каталог кэша;
  • Отразить package.list / system / data / packages.xml статус последних пакетов;
  • Передача в систему вместе с названием пакета эффекта установки;
  • Intent.ACTION_PACKAGE_ADDED: если новый пакет // (Intent.ACTION_PACKAGE_REPLACED) Если пакет обновлен Обзор процесса установки / обновления

Менеджер пакетов хранит информацию о приложении в трех файлах, расположенных в / data / system:

  1. Packages.xml – с разрешениями, входящими в пакет
  2. Packages.list – это просто текстовый файл, содержащий имя пакета, идентификатор пользователя, флаг и каталог данных
  3. Packages-stopped.xml: этот файл содержит список пакетов, который был остановлен. Остановленные государственные приложения не могут получать трансляцию.

Ссылки на соответствующий исходный код для менеджера пакетов (и установщика пакетов) приведены ниже:

Менеджер пакетов https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/services/java/com/android/server/pm/Settings.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/services/java/com/android/server/pm/PackageManagerService.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/core/java/android/content/pm/IPackageManager.aidl

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/services/java/com/android/server/pm/PackageSignatures.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/services/java/com/android/server/pm/PreferredActivity.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/services/java/com/android/server/PreferredComponent.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/core/java/android/content/IntentFilter.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/core/java/android/content/pm/PackageParser.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/core/java/android/content/pm/IPackageManager.aidl

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/services/java/com/android/server/pm/Installer.java

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/core/java/com/android/internal/app/IMediaContainerService.aidl

https://android.googlesource.com/platform/frameworks/base/+/483f3b06ea84440a082e21b68ec2c2e54046f5a6/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java

Установщик пакетов

https://android.googlesource.com/platform/packages/apps/PackageInstaller/+/47fe118e0178e9d72c98073ff588ee5cf353258e/src/com/android/packageinstaller/PackageInstallerActivity.java

https://android.googlesource.com/platform/packages/apps/PackageInstaller/+/47fe118e0178e9d72c98073ff588ee5cf353258e/src/com/android/packageinstaller/PackageUtil.java

https://android.googlesource.com/platform/packages/apps/PackageInstaller/+/47fe118e0178e9d72c98073ff588ee5cf353258e/src/com/android/packageinstaller/InstallAppProgress.java