Сгенерируйте файл Apk из файла aab (пакет приложений для Android)

Есть ли способ сгенерировать файл apk из пакета приложений Android через терминал или с помощью студии Android?

Приведенные ниже ответы говорят только о том, как создать файл APKS, который прямо из документации bundletool. Кто-нибудь нашел способ получить из пакета настоящий APK (не APKS) файл?

CaptainForge 13.02.2019 08:50

@CaptainForge, мой ответ делает именно это! stackoverflow.com/a/57149405/5284155

Aaron Small 29.07.2020 01:50
97
2
122 791
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

By default, the IDE does not use app bundles to deploy your app to a local device for testing

Обратитесь к команде набор инструментов

Для команды Debug apk,

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Для команды Release apk:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

Редактировать:

При тестировании своей сборки релиза для aab я использовал следующие команды (надеюсь, это поможет и другим):

  1. Загрузите файл jar bundletool из Репозиторий Github (Последний выпуск> Ресурсы> файл bundletool-all-version.jar). Переименуйте этот файл в bundletool.jar

  2. Создайте свой файл aab из Android Studio, например: myapp-release.aab

  3. Выполните следующую команду:

    java -jar "path/to/bundletool.jar" build-apks --bundle=myapp-release.aab --output=myapp.apks --ks = "/path/to/myapp-release.keystore" --ks-pass=pass:myapp-keystore-pass --ks-key-alias=myapp-alias --key-pass=pass:myapp-alias-pass
    
  4. myapp.apks файл будет сгенерирован

  5. Убедитесь, что ваше устройство подключено к вашей машине

  6. Теперь выполните следующую команду, чтобы установить его на свое устройство:

    java -jar "path/to/bundletool.jar" install-apks --apks=myapp.apks
    

Изменить 2:

Если вам нужно извлечь один файл .apk из файла .aab, вы можете добавить дополнительный параметр --mode=universal в команду bundletool:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks \
    --mode=universal \
    --ks=/MyApp/keystore.jks \
    --ks-pass=file:/MyApp/keystore.pwd \
    --ks-key-alias=MyKeyAlias \
    --key-pass=file:/MyApp/key.pwd

и выполнить

unzip -p /MyApp/my_app.apks universal.apk > /MyApp/my_app.apk

это сгенерирует один файл /MyApp/my_app.apk, который может быть установлен любым установщиком приложений устройства.

«По умолчанию» в Studio нет, но это легко сделать. Смотрите мой ответ ниже.

Pierre 29.10.2018 13:44

В общем, это на самом деле не отвечает на вопрос. Это создает файл APKS, а не файл APK. Файл APKS не может быть так легко установлен на устройство и требует, чтобы получатель APK использовал bundletool для его установки, или прошел через AS, или что-то еще, что, вероятно, знал бы только разработчик.

CaptainForge 13.02.2019 08:49

@CaptainForge вы нашли какое-нибудь решение?

Chathura Wijesinghe 28.06.2019 11:58

Эта команда просто сгенерирует файл архива APK (.apks), и нам нужно преобразовать его в формат .zip и извлечь его только для того, чтобы найти множество файлов APK. Правильный способ - использовать флаг --mode: universal. Я отправлял правку пару раз, но, к сожалению, они были отклонены по странной причине - «редактирование отклоняется от первоначального замысла сообщения». Обычные рецензенты, я пытаюсь заполнить неполный принятый ответ.

Amar Ilindra 01.09.2019 08:58

Можете ли вы также добавить к своему ответу возможность сделать это в Android Studio одним щелчком мыши? Это намного проще, чем запускать эти команды.

Pierre 01.09.2019 17:42

получение SEVERE: ошибка ввода будущего с ошибкой java.lang.OutOfMemoryError: пространство кучи Java пожалуйста помоги

bhavin 23.10.2019 14:07

Можно ли использовать этот инструмент в приложении для Android? Можно ли с его помощью просто установить файл aab напрямую, без предварительного извлечения в несколько файлов apk?

android developer 14.06.2020 15:06

Есть инструмент под названием bundletool, который может создавать APK из вашего файла AAB:

Подробную информацию об этом инструменте можно найти здесь: https://developer.android.com/studio/command-line/bundletool

Но вот некоторые основные моменты, взятые с этого сайта:

Сборка APK-файлов

Когда bundletool генерирует APK из вашего набора приложений, он включает их в контейнер, называемый архивом набора APK, который использует расширение файла .apks. Чтобы сгенерировать набор APK для всех конфигураций устройств, поддерживаемых вашим приложением, из пакета приложений, используйте команду bundletool build-apks, как показано ниже:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

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

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
  --ks=/MyApp/keystore.jks
  --ks-pass=file:/MyApp/keystore.pwd
  --ks-key-alias=MyKeyAlias
  --key-pass=file:/MyApp/key.pwd

Установка APK

bundletool install-apks --apks=/MyApp/my_app.apks

Создание набора APK-файлов для конкретного устройства

bundletool build-apks --connected-device --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Хорошо, вот полный способ, который я должен был сделать:

  1. Загрузите bundletool-all-0.10.3.jar с этого ссылка, загрузите последнюю доступную версию

  2. Создайте пакет приложений с помощью студии Android и найдите его путь:

    В моем случае это E:\Projects\Android\Temp\app\build\outputs\bundle\debug\app.aab

  3. Скопируйте банку bundletools в какое-нибудь место и получите путь к ней

В моем случае это E:\Temp\bundletool-all-0.6.0.jar

Используйте эту команду:

java -jar "BUNDLE_TOOL_JAR_PATH" build-apks --bundle = "BUNDLE_PATH" --output=YOUR_OUTPUT_NAME.apks

В моем случае это будет

    java -jar "E:\Temp\bundletool-all-0.6.0.jar" build-apks \
        --bundle = "E:\Projects\Android\Temp\app\build\outputs\bundle\debug\app.aab" \
        --output=out_bundle_archive_set.apks
  1. Это создаст файл out_bundle_archive_set.apks, переименует его в .zip out_bundle_archive_set.zip, извлечет этот файл и готово. У вас будет несколько файлов apk.

Для установки непосредственно на внешнее устройство используйте:

java -jar "E:\Temp\bundletool-all-0.6.0.jar" install-apks --apks=out_bundle_archive_set.apks

Проверьте этот Сообщение блога для получения дополнительной информации. также проверьте официальный сайт

Переименование .apks в .zip и разархивирование - вот те части, которые я искал. Спасибо!

Chris.Zou 19.05.2019 12:46

СЕРЬЕЗНО: входное будущее не удалось с ошибкой java.lang.OutOfMemoryError: пространство кучи Java

bhavin 23.10.2019 14:05

Спасибо за решение. Однако потребуется еще несколько флагов. --ks и --ks-key-alias со значениями --ks = "path_to_your_keystore" и --ks-key-alias = "key_alias_from_android_studio"

sj_959 18.08.2021 12:53

Люди уже объяснили, как это сделать с помощью командной строки. Для завершения, я подумал, что я также покажу, как это сделать через пользовательский интерфейс в Android Studio.

Когда вы открываете «Конфигурации запуска / отладки», вы можете выбрать "APK из набора приложений" (вместо «APK по умолчанию»).

Смотрите скриншот:

Не удалось создать APK-файл в формате aab, появляется следующая ошибка: «Не удалось установить. Не удалось выполнить установку, <a href='rerun'> Повторить </a>»

shekar 31.05.2019 15:09

После Shift + F10 он установит приложение на устройство, а не сгенерирует apk.

CoolMind 16.08.2019 10:20

Как установить расположение ааба?

abbr 25.10.2021 19:35

Пока что никто не предоставил решения для получения APK из AAB.

Это решение сгенерирует универсальный двоичный файл в виде apk.

  1. Добавьте --mode=universal в свою команду bundletool (если вам нужно подписанное приложение, при необходимости используйте параметры --ks).

    bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
        --mode=universal
    
  2. ГЛАВНЫЙ ШАГ: Измените имя выходного файла с .apks на .zip

  3. Разархивируйте и исследуйте

  4. Файл universal.apk - ваше приложение

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

Что, если я хочу создать файл APK в самом Android? Является ли это возможным?

android developer 30.06.2020 01:52

Можно ли использовать .apk для редактирования приложения (или хотя бы для просмотра кода), а затем повторно загрузить его в Google Play?

aditya 11.08.2020 17:13

Вы также можете напрямую собрать APK, соответствующий вашему подключенному устройству, используя build-apks с --connected-device, а затем bundletool install-apks.

Rodolphe Lemasquerier 17.06.2021 15:51

Refer Geek Dashboard for more info.

Тем, кто хочет создать единый универсальный файл APK из пакета Android App Bundle, необходимо использовать флаг --universal при запуске команды build-apks.

java -jar bundletool.jar build-apks --bundle=your_app.aab --output=your_app.apks --mode=universal

Где bundletool.jar - это jar-файл bundletool, который вы скачали здесь

your_app.aab - это Android App Bundle вашего приложения.

your_app.apks - это выходной файл архива APK, который будет создан после запуска команды.

При выполнении указанной выше команды убедитесь, что вы поместили bundletool.jar и ваш файл AAB в одну и ту же папку.

Теперь вам нужно изменить формат файла your_app.apks на your_app.застегивать и извлечь его, чтобы найти файл universal.apk.

Примечание: используйте флаг –overwrite для перезаписи файла APK, если он уже существует с таким же именем. В противном случае команда bundletool выдаст вам фатальную ошибку.

получение SEVERE: ошибка ввода будущего с ошибкой java.lang.OutOfMemoryError: пространство кучи Java, пожалуйста, помогите

bhavin 23.10.2019 14:06

на Mac это легко сделать с помощью homebrew

brew install bundletool

вы можете использовать команду ниже для создания apks

bundletool build-apks --bundle=aab_path.aab --output=release.apks

Вышеупомянутая команда генерирует файл apks, который позже может быть извлечен для получения различных файлов apk. Чтобы увидеть все сгенерированные файлы, измените расширение с .apks на .zip и просто извлеките файлы.

затем вы можете установить apk с помощью этой команды на подключенном устройстве

bundletool install-apks --apks=release.apks

Считаю этот способ намного эффективнее

Подумайте о добавлении более подробного ответа к снимку экрана.

lunarfyre 02.09.2020 01:04

Вот что я сделал. Во-первых, я на Mac. Итак, в этом официальном руководстве https://reactnative.dev/docs/signed-apk-android выполните следующие шаги.

  1. Запустите эту команду sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 вы можете изменить имя my-upload-key по своему усмотрению
  2. Настройте переменные градиента в соответствии с руководством
  3. Также сделайте то же, что и в руководстве для пункта «Добавление конфигурации подписи в конфигурацию Gradle вашего приложения».
  4. Теперь, вместо того, чтобы продолжать (что приведет к созданию файла AAB), вы можете сделать следующее.

4.1 Я открываю тот же проект (папку android) в Android Studio

4.2 С Menu Options > Build > Clean Project

4.3 Нажмите кнопку «Сделать проект» и дайте ему завершить (если вы можете запустить с помощью npm run android, то это должно закончиться без каких-либо проблем) Сделать проект

4.4 После этого нажмите Menu options > Build > Generate Signed Bundle/APK.... Создать подписанный пакет / APK ...

4.5 На следующем экране выберите переключатель APK и нажмите Далее. Выберите вариант APK

4.6 На следующем экране перейдите к файлу хранилища ключей, который вы создали на первом шаге, его паролю, псевдониму и паролю, нажмите «Далее». Заключительный этап

Подождите, пока он завершится. Вы можете увидеть некоторые ошибки, но, что более важно, в правом нижнем углу вы увидите всплывающее окно с надписью «Найдите». Щелкните по нему, и вы найдете свой app-release.apk.

Удачи

Другие вопросы по теме