Подтвердить что ты не робот

Что именно происходит, когда я устанавливаю приложение для Android?

Моя догадка заключается в том, что содержимое пакета .apk извлекается где-то, и приложение зарегистрировано в каком-то каталоге, чтобы запускать приложение или что-то еще. Но это все? Если это так, является ли исходный файл manifest.xml каждый раз, когда приложение запущено или оно предварительно обработано в какой-либо другой форме?

4b9b3361

Ответ 1

Некоторые основы

.apk файл

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

Android - это Linux

Основной Android-системой является система Linux. Android использует собственное ядро ​​Linux с некоторыми дополнительными функциями энергосбережения и некоторыми улучшениями скорости. Внутренняя память Android-устройства отформатирована с помощью YAFFS2 файловой системы, в которой полностью реализованы концепции доступа к Linux.

Используемая файловая система может отличаться по версии производителя или Android-версии. Новые устройства часто используют ext3, а Samsung использует собственную файловую систему: RFS

Это один из важных аспектов Sandbox-системы, который используется Android.

Компиляция приложений

Что происходит с .java файлами?

Сначала они компилируются обычным компилятором Java. После того, как они скомпилированы (до .class файлов), dx -tool из Android SDK затем преобразует/транслирует эти "нормальные" java-классы в Dalvik-Bytecode.

Этот "специальный" java-код затем интерпретируется DVM (Dalvik Virtual Machine), который основан на JRE-реализации с открытым исходным кодом Apache Harmony.

Обновление. В более новых версиях Android шаг преобразования/пересылки можно пропустить, если jack используется. Таким образом, файлы .java напрямую компилируются в формат .dx.

Кроме того, поскольку версия 4.4 (KitKat) Android имеет новый ART runtime, который официально заменил Dalvik на Android 5 (Lollipop).

Что происходит с ресурсами, которые я ввел в каталог /asset?

Android предлагает /assets -directory для добавления некоторых двоичных raw файлов (например, базы данных SQLite). Файлы, помещенные в этот каталог не скомпилированы или оптимизированы.

Если вы поместите свои файлы в этот каталог, это будет поведение, которое вы ожидаете от Android.

Что происходит с ресурсами, которые я ввел в /res/raw -каталог?

Как и каталог /assets, вы также можете поместить здесь двоичные (или другие) исходные файлы (например, HTML файлы для справки). Эти файлы скомпилированы/оптимизированы (если возможно).

Что происходит с манифестом и другими XML файлами?

Android-манифест, а также другие XML файлы (макеты, строки и т.д.) хранятся и "скомпилируются" в двоичный XML-формат. Это оптимизация скорости.

Песочница

С точки зрения ОС Android, одному Приложению принадлежит:

  • собственный процесс,
  • это собственный OS-пользователь (например, Linux),
  • собственный DVM,
  • это собственное место в куче и
  • это собственное место в файловой системе.

Итак, у каждого приложения Android есть собственный пользователь, который имеет права на доступ к нему во внутреннем хранилище (который защищен стандартным управлением правами на файловую систему Linux) и имеет собственный DVM-процесс (который не может быть доступ к ним извне приложения).

Чтобы предоставить программе возможность покинуть Песочницу (например, для подключения к Интернету), используются разрешения, объявленные в манифесте Android.

Шаги во время установки

Итак, из приведенных выше объяснений должно быть ясно, что происходит, когда установлено Android-приложение:

  • Создан новый пользователь для приложения.
  • При использовании этих новых прав пользователя создается каталог приложений во внутреннем хранилище.
  • Содержимое файла .apk извлекается там.
  • Анализируется Android-манифест и объявляются объявленные intent-filter (например, android.intent.category.LAUNCHER -фильтр для стандартной точки входа приложений).
  • Теперь приложение готово для первого запуска.

Ответ 2

Когда вы устанавливаете приложение, система Android копирует APK в папку "/data/app" и называет его именем пакета, за которым следует номер установки (сколько раз вы устанавливаете или обновляете приложение).

Я попытался установить приложение вручную, скопировав его APK и вставив его в папку /data/app и перезагрузив свое устройство, он появится как установленное приложение и прекрасно работает.

Также я заметил в link2SD, что любое установленное приложение имеет следующее:

Apk, расположенный в /data/app/package -number.apk

Dex находится в /data/dalvik -cache/[email protected]@[email protected]

Lib находится в /data/data/package/lib

Данные, находящиеся в /data/data/package

Кэш, расположенный в/data/data/package/cache

Ответ 3

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

<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Этот фильтр намерений позволяет пусковой установке находить начальную активность каждого приложения. Поиск "намеренного разрешения" для получения более подробной информации об этом процессе... Я бы сказал, что это более элегантно, чем просто регистрировать приложение в каком-то случайном каталоге.

Как указано в http://developer.android.com/guide/topics/intents/intents-filters.html, "система Android заполняет приложение запуска, экран верхнего уровня, который показывает доступные приложения для запуска пользователя, путем поиска всех действий с фильтрами намерений, которые определяют действие" android.intent.action.MAIN "и" android.intent.category.LAUNCHER ". Затем он отображает значки и метки этих действий в пусковая установка"