Как посмотреть содержимое APK файла и исходники в Android Studio
Что проверяют
Понимаете ли вы, из чего состоит APK, и знаете ли, что исходников в нём нет. Следом обычно спрашивают, как R8 влияет на то, что вы увидите, и как расшифровать обфусцированный стектрейс.
Как отвечать
Начните с устройства файла. APK это zip-архив: AndroidManifest.xml в бинарном XML, один или несколько classes.dex, скомпилированные ресурсы в resources.arsc, папки res/, assets/, lib/ с нативными библиотеками, подпись в META-INF.
Инструменты по задаче:
- APK Analyzer: меню Build, пункт Analyze APK, или просто перетащить файл в окно Studio. Показывает размер каждой части в сжатом и распакованном виде, раскодированный манифест, ресурсы, число методов в dex. Байткод класса можно открыть в виде smali, есть сравнение двух APK;
apkanalyzer: то же из командной строки, входит в Command-line Tools Android SDK, удобен в CI для контроля размера;- Profile or Debug APK: пункт меню File, открывает готовую сборку как проект для отладки и профилирования. Код виден как smali, исходники можно подключить вручную;
- jadx: декомпилирует dex в читаемый Java-код,
jadx-guiудобен для навигации и поиска; - apktool: раскодирует ресурсы и манифест в текст, код отдаёт в smali и умеет пересобрать APK обратно.
Если приложение публикуется как AAB, APK у вас в руках нет. bundletool build-apks соберёт из бандла набор APK для нужной конфигурации устройства.
Где спотыкаются
Обещают «достать исходники». Получится декомпилированный код, а не исходный: без комментариев, местами с ошибками восстановления, а Kotlin превратится в громоздкую Java с вызовами Intrinsics.
Забывают про R8. В релизной сборке классы и методы переименованы в a, b, c, и без mapping.txt код читается с трудом. Этот же файл нужен, чтобы расшифровать стектрейс через retrace, поэтому его сохраняют для каждой выпущенной версии.
Импортируют результат apktool или jadx в Studio и ждут, что он соберётся как обычный проект. Это материал для чтения, а не рабочая кодовая база. И помните, что разбор чужого приложения ограничен лицензией и законом, на собеседовании речь идёт о своих сборках.