Что внутри APK-файлов
easy

Что внутри APK-файлов

Вы не представляете, как там много всего

Большой плюс устройств на Android в том, что на них можно поставить даже те приложения, которых нет в официальных магазинах приложений: Google Play, App Gallery и им подобным. Для установки Android использует специальные apk-файлы, внутри которых и хранится приложение. Но кроме самого приложения, в этих файлах есть много других данных. Сегодня разберёмся, как устроены apk-файлы и что там внутри на самом деле.

Что такое APK

APK, или Android Package Kit, — это формат файла пакета для операционной системы Android. Другие названия APK: Android Package и Android Application Package. По сути, это тот же архив, в котором запакованы скомпилированный код и файлы данных и ресурсов приложения — элементы, которые нужны Android-устройству, чтобы установить приложение.

Когда вы скачиваете приложений из Google Play, магазин приложений выступает как пакетный менеджер: вы выбираете нужную программу, а магазин скачивает и устанавливает её, проверяя по пути все требования к системе и разрешениям.

Так как apk — это архив, то его можно распаковать. Если изменить расширение файла на .zip, то можно легко заглянуть внутрь и увидеть много разных папок и файлов:

Что такое APK

Что внутри файлов и папок внутри APK

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

В папке libs/ находятся папки с платформо-зависимым скомпилированным кодом и родными библиотеками для специфической архитектуры устройств, например x86 или x86_64. Для каждого устройства — своя папка.

Папка META-INF/ хранит метаданные APK, в том числе цифровую подпись приложения.

Папка res/ содержит папки с большинством ресурсов XML, например макетов, и изображений, например JPEG или PNG, которые хранятся в своих папках в несжатом виде, в отличие от тех ресурсов, что упакованы в файл resourses.arsc. Папки изображений могут содержать квалификаторы — различные ключевые слова, которые обозначают аспекты и уровни доступа к элементам приложения. Если открыть папку res, внутри можно увидеть папки анимации, цветов и различных изображений:

Что внутри файлов и папок внутри APK

Файл AndroidManifest.xml — это что-то вроде паспорта приложения в формате бинарного XML, который содержит название, версию, доступы и другие параметры приложения. Вот типичный фрагмент из AndroidManifest.xml:

0300 0800 1c4f 0000 0100 1c00 c026 0000
9000 0000 0000 0000 0000 0000 5c02 0000
0000 0000 0000 0000 0e00 0000 1c00 0000
2800 0000 3400 0000 4c00 0000 5e00 0000
7200 0000 8400 0000 ac00 0000 c600 0000

Если конвертировать его в обычный XML, получим примерно такое содержимое. Тут уже видно, что для работы приложению нужны разрешения на подключение к интернету, геопозиции и состоянию сети:

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="it.feio.android.omninotes">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
.....

Файл classes.dex содержит код, который будет запускаться непосредственно на Android-устройстве. DEX — это расширение для исполняемых файлов Dalvik, виртуальной машины для выполнения программ на Java. Внутри находятся скомпилированные Java-классы и могут быть дополнительные файлы DEX под названием classes2.dex (так бывает, когда приложение использует мульти-APK, то есть несколько APK сразу). Если распаковать файл classes.dex, внутри будет множество файлов, например:

Что внутри файлов и папок внутри APK

Файл resources.arsc содержит некоторые скомпилированные ресурсы и идентификаторы, например оптимизированные файлы изображений и XML-ресурсы, преобразованные в бинарный XML. 

Зачем внутри APK столько файлов

Задача программы в мобильном устройстве — работать сразу после установки, чтобы все ресурсы и библиотеки сразу были под рукой. На компьютере система может попросить пользователя установить нужный фреймворк или другую программу, которая нужна для запуска нового приложения. Но на телефоне так сделать сложно, поэтому разработчики упаковывают в apk все ресурсы, которые только могут понадобиться приложению. А это не только код программы, но и рисунки, шрифты, видео и звуковые файлы.

Что происходит при установке файла APK

Технически установка apk-файла почти то же самое, что и распаковка архива, только с некоторыми отличиями:

  1. Файлы распаковываются в специальную системную папку, внутри которой для каждого приложения создаётся своя вложенная папка.
  2. При установке система смотрит в манифест и проверяет, соответствует ли она всем требованиям оттуда. Если нет — появится сообщение о том, что эта программа не запустится на этом устройстве.
  3. Система записывает себе в список название нового приложения и его версию.

А все разрешения и доступы приложение получает (или не получает) только во время первого запуска — во время установки Android обычно это не спрашивает.

Про безопасность

Хотя APK-файлы очень удобны для установки приложений, использовать их может быть небезопасно. Всё зависит от того, откуда был загружен файл. Если это проверенный ресурс, например официальный сайт компании, которая разработала приложение, то, скорее всего, APK-файл не содержит вредоносный код.

Если же APK-файл взят из сомнительного источника (торренты, форумы, сайты без регистрации и СМС), его установка может поставить под угрозу безопасность устройства и ваших личных данных. Например, разработчик приложения может получить доступ к устройству и контролировать его удалённо. Небезопасные APK-файлы могут причинить вред устройству, например заставить его работать медленнее и менее эффективно, вызвать сбой в работе или неисправность. Также такие файлы могут содержать неприемлемый контент.

Самый простой способ избежать таких проблем — не использовать APK-файлы из ненадёжных источников. Мы вас предупредили :-)

Текст:

Инна Долога

Редактор:

Михаил Полянин

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Приходите к нам в мобильную разработку
У нас множество экранов всех форм и размеров, две конкурирующие экосистемы, бесконечные оптимизации и высокие зарплаты. Начните бесплатно в Яндекс Практикуме, и если понравится — врывайтесь в профессию.
Начать бесплатно
Приходите к нам в мобильную разработку Приходите к нам в мобильную разработку Приходите к нам в мобильную разработку Приходите к нам в мобильную разработку
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy