Как приложения Android (Facebook и т. д.) устанавливаются на телефон Android?

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

Например. в Windows:

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

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

  • После выполнения приложения для Android (после установки) только что загруженные данные помещаются в такие места, как: Android/data или Android/obb и т. д.

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

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

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

  • Я также не знаю, как эти файлы структурированы на устройстве Android (после установки), например. структурированы ли эти файлы в таких папках, как: java, res, menu, layout и т. д., как во время разработки в средах как Android Studio?

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

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


person Community    schedule 20.05.2015    source источник
comment
В одном вы можете быть уверены: единого общего ответа не существует. Особенно сейчас после перехода с Dalvik на ART. Вы когда-нибудь задумывались о том, чтобы укоренить устройство и просто посмотреть, что вы найдете?   -  person Xaver Kapeller    schedule 20.05.2015
comment
Вам не нужно рутировать устройство, чтобы осмотреться. Подключите телефон к компьютеру и запустите adb shell. Команды аналогичны оболочке unix - например. вы можете ввести cd и ls. Проверьте каталоги, такие как /data/app. blog.shvetsov.com/2013/02/   -  person craig65535    schedule 20.05.2015
comment
Помимо описания формата APK на вашей любимой вики, новые сведения об ART были рассмотрены на последнем IO Google: youtu. быть/EBlTzQsUoOw   -  person Morrison Chang    schedule 20.05.2015


Ответы (1)


Начало

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 ?

  1. Предварительная установка (например, камера, календарь, браузер и т. д.) APK хранится в /system/app/
  2. Пользовательская установка (ApiDemo, Any.do и т. д.) APK, хранящаяся в /data/app/
  3. Диспетчер пакетов создает каталог данных /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, атрибут пакета указывает, что разрешение принадлежит пакету. В большинстве случаев «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
comment
Как ОС Android извлекает файлы .dex и куда они извлекаются для каждого установленного приложения? - person ; 22.05.2015
comment
ОС извлекает пакет из apk, поэтому сохраняет его в /data/system. пожалуйста, обратитесь к заголовкам моих ответов Что такое процесс установки APK в деталях и Как диспетчер пакетов хранит данные. Там все подробно описано. - person Yurets; 22.05.2015
comment
Я имел в виду, как ОС Android извлекает код dex в каталоги кеша и где эти каталоги кеша расположены для каждого приложения? - person ; 22.05.2015
comment
ах, извините. Итак, поскольку apk является своего рода архивом, он преобразует apk в zip и просто извлекает файлы. Это пример пути /data/dalvik-cache/x86/data@[email protected]@[email protected]. Нашел еще одну ссылку, может быть полезной. >github.com/dogriffiths/HeadFirstAndroid/wiki/ - person Yurets; 22.05.2015
comment
Я имею в виду, что я знаю, как извлечь файл apk: поэтому я могу видеть AndroidManifest.xml, class.dex и resources.arsc и т. д. Но вы упомянули выше, что после того, как ОС извлекает apk, она затем извлекает class.dex к местоположению кеша: где это место? и как он извлекает файл class.dex, чтобы показать исходные классы? - person ; 22.05.2015
comment
Я не совсем понимаю, что вы имеете в виду... если вы хотите преобразовать dex в исходный код Java самостоятельно, поэтому вы используете dex2jar , путь такой же, как в моем комментарии выше /data/dalvik-cache/x86/data@app@[email protected]@classes.dex и ОС не конвертирует dex файл в исходный. Он специально преобразован в dex, чтобы Dalvik VM мог их выполнять... Насчет Manifest я не проверял и не могу найти соответствующей ссылки, но я думаю, что он должен быть на том же пути. Просто проверьте это сами. Возможно для этого нужен рут, но точно сказать не могу. - person Yurets; 22.05.2015