Ответ 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
-фильтр для стандартной точки входа приложений). - Теперь приложение готово для первого запуска.