7

Я знаю, как установить приложение на устройство Android, например, от Play-Store или через файл .apk. Но я хотел бы понять фактический процесс установки.«Как« Android-приложения (Facebook и т. Д.) Установлены на Android-телефоне?

E.g. на Windows:

  • Серийных коды и т.д. помещается в реестре
  • файлы важны для бега программного обеспечения помещается в Program Files папки (основного .exe и т.д.)

До сих пор, что я знаю о процессе установки Android, является:

  • После того, как андроид приложение было выполнено (после установки), данные, загруженные свеже помещается в местах, как: Android/данных или Android/ФЖДА т.д.

  • Если конкретно выражается Android разработчика , файлы также можно разместить в другом месте, например на вторичного хранения (карты памяти, облако хранения и т.д.)

Но кроме этого, мои знания о процессе Android установки довольно тонкий, например:

  • Я не знаю, где размещаются важные файлы, относящиеся к выполнению программы Android (в случае Windows, .exe, связанные с ними носители, библиотеки и т. д.)

  • I likel y не знаю, как эти файлы структурированы на устройстве Android (после установки), например. которые эти файлы структурированы в папках, как: Java, Реза, меню, макета и т.д., как в процессе разработки в средах, таких как Android Studio?

  • Я тоже не знаю, как какие приложения типы файлов сохраняются на устройстве после установки пользователя (после распаковки из андроида установочного файла или APK), например, они хранятся в .java и или .xml файлов, так как в процессе разработки и т.д.

Надеюсь кто-то может заполнить пробелы, спасибо.

+1

Одна вещь, на которую вы можете быть уверен: нет единого ответа. Особенно сейчас после переключения с Дальвика на АРТ. Вы когда-нибудь считали, что укореняете устройство и просто ищете то, что найдете? –

+0

Вам не нужно запускать устройство, чтобы осмотреться. Подключите телефон к компьютеру и запустите 'adb shell'. Команды похожи на оболочку unix - например, вы можете ввести 'cd' и' ls'. Проверьте каталоги, например '/ data/app'. http://blog.shvetsov.com/2013/02/access-android-app-data-without-root.html – craig65535

+1

Помимо поиска описания формата APK в вашей любимой вики - более новые материалы об ART были освещены на последний Google IO: https://youtu.be/EBlTzQsUoOw –

ответ

12

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?

  1. Pre-Install (то есть камера, календарь, браузер и т.д.). APK хранится в/системы/приложения/
  2. пользователя Установка (ApiDemo, Any.DO и т.д.) APK хранится в /data/app/
  3. 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): случай обновления.

enter image description here

Сколько хранить данные менеджера пакетов?

Менеджер пакетов хранит информацию о приложении в трех файлах, расположенных в /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.

+0

Как ОС Android извлекает файлы .dex и где их извлекает, для каждого установленного приложения? –

+0

OS извлекает пакет из apk, поэтому он хранит его в '/ data/system'. см. заголовки моего ответа. * Что такое процесс установки APK в деталях * и * Как хранит данные диспетчера пакетов *. Здесь подробно описано все. – Yurets

+0

Я имел в виду, как Android O.S «извлекает код dex для кэширования каталогов» и где эти каталоги кешей расположены для каждого приложения? –