Недавно я делал сборку apk в одном приложении, так что хочу рассказать, какие есть для этого решения.
Процесс сборки Android-приложения
Для начала о самом процессе сборки apk.
Когда вы запускаете сборку, первым делом читается AndroidManifest.xml, в нём есть важные параметры, такие как package (например, com.example.app) и targetSdkVersion .
Затем вызывается программа aapt (Android Asset Packaging Tool), которой передаётся AndroidManifest.xml, папка с ресурсами res/ , assets/ , путь к android.jar нужной target-версии. aapt проверяет ресурсы и компилирует их, создавая при этом класс R.java в котором содержатся идентификаторы ресурсов и файл resources.arsc в котором содержится информация об xml-ресурсах и их атрибутах.
Далее подхватываются все библиотеки, которые используются в проекте и запускается Java-компилятор javac . Полученные class-файлы передаются в программу dx , которая переводит их в Dalvik dex-формат. Причём для оптимизации, готовые библиотеки дексируются отдельно, а классы проекта отдельно (оптимизация в том, что дексированные библиотеки можно закешировать). Если собралось несколько dex-файлов, то они все объединяются при помощи Dex Merger Tool. В конечном итоге мы получаем единственный файл classes.dex (или несколько, если используется multidex).
Как извлечь APK файл из любого Android приложения?
Теперь у нас есть все компоненты и можно собирать apk. По сути это просто упаковка всех файлов в zip-архив, но используется специальная программа apkbuilder . После её выполнения получаем неподписанный apk-файл, то есть без папки META-INF внутри.
Последний этап — подпись apk. Берётся заранее сгенерированный ключ и передаётся в jarsigner вместе с неподписанным apk-файлом. На выходе имеем готовое приложение, которое можно устанавливать.
Сборка из Android-приложения
К счастью, Android достаточно мощная платформа, так что все вышеперечисленные приложения также портированы для неё.
Компилятор Java присутствует в ECJ.
Последнюю версию dx можно собрать из исходников в официальном репозитории.
Apkbuilder идёт как часть sdklib, но вместо него можно воспользоваться любой библиотекой для создания zip-архива.
Наконец, библиотека для подписи apk — zip-signer.
Следует заметить, что для полноценной сборки, нам понадобятся не только эти библиотеки, но ещё и android.jar последней версии. В итоге мы имеем 20 Мб зависимостей, что в прочем, не так уж и много. А тот же android.jar и aapt можно скачать при первом запуске, что значительно сэкономит место и трафик пользователям.
1. Запуск aapt в зависимости от архитектуры
Больше всего проблем с aapt, так как это не библиотека, а исполняемая программа. Нужно запускать совместимую версию, предварительно выставив права на запуск.
Источник: annimon.com
Как извлечь установочный АПК файл любого приложения в телефоне и поделиться им. APK Extractor
Как сделать APK файл
А какое отношение эти «папки» и «зип файл» имеют к Андроид-приложениям?
– user181100
16 апр 2018 в 16:19
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
- Зайдите в Android Studio.
- Найдите на верхней панели вкладку Build.
- Нажмите на вкладку Build
- Из выпадающего списка найдите Build APK(s).
- Нажмите на вкладку Build APK(s).
- После в нижнем правом углу появится сообщение, найдите слово locate.
- Нажмите на слово locate
- Вы создали и нашли где находится APK файл. Поздравляю. Фотографии как это выглядит (MAC OS):
Отслеживать
ответ дан 16 апр 2018 в 22:27
Timur Mukhortov Timur Mukhortov
2,039 9 9 серебряных знаков 24 24 бронзовых знака
вообще для создания плноценного APK нужен пункт Generate Signed APK. В вашем случае при создании релизной сборки мы получим неподписанный APK или подписанный отладочным ключом при сборке debug
17 апр 2018 в 3:05
17 апр 2018 в 7:14
imgur.com/a/Xl8XIhq Извиняюсь тут нету Генерации апк(((
Источник: ru.stackoverflow.com
Как получить файл apk с устройства Android?
Использовать adb. С помощью adb pull вы можете копировать файлы с вашего устройства в вашу систему, когда устройство подключено к USB. Разумеется, вам также нужны права для доступа к каталогу, в котором находится ваш файл. Если нет, вам нужно сначала запустить его. Если вы обнаружите, что многие APK называются «base.apk», вы также можете использовать эту команду в одной строке, чтобы вытащить все APK с телефона, к которому вы можете получить доступ, переименовывая имена «base.apk» в имя пакета. Это также исправляет проблему, не найденную в каталоге для путей APK с кажущимися случайными символами после имени:
for i in $(adb shell pm list packages | awk -F’:’ »); do adb pull «$(adb shell pm path $i | awk -F’:’ »)»; mv base.apk $i.apk 2 /dev/null ;done
Если вы получаете «adb: error: не удалось установить удаленный объект», который указывает, что у вас нет необходимых разрешений. Я запускал это на ненастроенном Moto Z2 и смог загрузить ВСЕ APK, которые я не удалял (см. Ниже), кроме youtube.
adb shell pm uninstall —user 0 com.android.cellbroadcastreceiver
(для просмотра пользователями пользователя adb shell pm list users) Это способ удаления/удаления (не с телефона по мере его возврата с заводским сбросом) почти ЛЮБОЕ приложение БЕЗ КОРИРОВАНИЯ, ВКЛЮЧАЯ системные приложения (подскажите, какое раздражающее приложение для обновления, которое обновляет ваш телефон строка это или не может быть найдена grepping для «ccc»)
Maurits Rijk 27 окт. 2010, в 13:52
Поделиться
Спасибо Мауриц Райк. Пожалуйста, помогите мне. Я хочу скопировать файл iTwips.apk с устройства в систему. Я использую следующую команду. это правильно? Я получил сообщение об ошибке «Android2.2Froyo / SDCard / iTwips.apk» не выходит . / Пользователи / BBB / Android / Android-SDK-Mac_86 / Tools / ADB тянуть Android2.2Froyo / SDCard / iTwips.apk / Пользователи / BBB Спасибо заранее .
Finder 27 окт. 2010, в 13:17
На моем устройстве (Android 2.1) команда будет «adb pull /sdcard/test.jpg», чтобы скопировать test.jpg с моей SD-карты в текущий каталог. Пожалуйста, сначала найдите ваш файл iTwips.apk, используя «adb shell». Это запустит оболочку на вашем устройстве, и вы сможете использовать стандартные команды Unix, такие как ls и cd, для просмотра ваших каталогов.
Maurits Rijk 27 окт. 2010, в 13:56
Привет! На самом деле iTwips.apk хранится во внутренней памяти устройства. как я могу использовать оболочку для этого? Я использую следующую команду adp -d shell .. Но она не работает .. Пожалуйста, помогите мне .. Спасибо заранее.
Finder 27 окт. 2010, в 16:15
Привет, большое спасибо. Я могу получить изображения с SDCard сейчас. но я хочу вытащить файл apk с устройства (папка управления приложениями). ITwips apk хранится в папке приложения. Пожалуйста, помогите мне.
Finder 27 окт. 2010, в 16:40
Возможно, у вас нет прав на чтение из этой папки. В этом случае вам сначала потребуется root-доступ к вашему устройству. Как это сделать, зависит от устройства, которое у вас есть. Тип устройства Google + root-доступ, и вы, вероятно, найдете много информации.
Maurits Rijk 27 окт. 2010, в 18:10
Isa A 09 июнь 2016, в 05:10
Для инструкций смотрите ответ от Йоджимбо.
methodsignature 05 июнь 2018, в 18:59
В Linux мне фактически пришлось сначала убрать CR (или первая буква была съедена): path=»$» (да, чтобы быть на безопасной стороне Я также удалил NL и вкладки, я всегда использую этот фрагмент для очистки).
Izzy 14 окт. 2018, в 21:10
Показать ещё 6 комментариев
Ни один из этих предложений не работал для меня, потому что Android добавлял номер последовательности в имя пакета для создания окончательного имени файла APK. В более поздних версиях Android (Oreo и Pie) добавляется непредсказуемая случайная строка. Следующая последовательность команд — это то, что сработало для меня на ненарушенном устройстве:
1) Определите имя пакета приложения, например «com.example.someapp». Пропустите этот шаг, если вы уже знаете имя пакета.
adb shell pm list packages
Просмотрите список имен пакетов и попробуйте найти соответствие между рассматриваемым приложением и именем пакета. Это обычно легко, но обратите внимание, что имя пакета может быть полностью не связано с именем приложения. Если вы не можете распознать приложение из списка имен пакетов, попробуйте найти приложение в Google Play с помощью браузера. URL-адрес приложения в Google Play содержит имя пакета.
2) Получить полный путь к файлу APK для нужного пакета.
adb shell pm path com.example.someapp
Результат будет выглядеть примерно так:
пакет: /data/app/com.example.someapp-2.apk
или же
пакет: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ ==/base.apk
3) Используя полное имя пути из шага 2, потяните файл APK с Android-устройства в окно разработки.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
Источник: overcoder.net