Как создать полный APK-файл, включая модуль динамических функций

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

В основном я бы сгенерировал APK-файл, как обычное приложение. Но я не мог обойтись динамической функцией. Да, я знаю, что динамическая функция будет работать на основе AAB.

Есть ли способы сделать нормальный (базовый + все модули) APK файл ?. Пожалуйста, помогите с этим.

Спасибо


person chain    schedule 23.02.2019    source источник
comment
Вы думали о настройке вариантов сборки? developer.android.com/studio/build/build-variants   -  person Javad Arjmandi    schedule 24.02.2019


Ответы (3)


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

В этом конкретном случае вы можете использовать что-то вроде:

bundletool build-apks --bundle <bundle_file> --output <APKS file> --ks <key_store> --key-pass <jks password> --ks-key-alias <key_alias> --ks-pass <key password> --overwrite --mode=universal

Ключевым моментом является включение --mode=universal этого инструмента пакета инструкций для создания универсального APK, который будет включать все модули, имеющие <dist:fusing dist:include="true"/> в манифесте.

Аналогичным образом, когда вы запускаете свой проект из Android Studio на устройстве, используя конфигурацию по умолчанию для Run (Deploy = Default APK), он включает все ваши модули по запросу.
Вместо этого, когда вы запускаете приложение из Studio, используя конфигурацию запуска (Deploy = APK из AppBundle), вы можете выбрать, какие модули будут установлены.

Однако в обоих случаях вы не можете тестировать загрузку модуля по требованию, если не заходите в магазин Play.

Примечание (ноябрь 2020 г.)

Как сообщается в другом ответе ниже, плагин Android Gradle включает в себя пару недокументированных задач, которые можно использовать для создания универсальных APK-файлов Debug и Unigned Release вашего приложения.

Задача, связанная с версией Debug, может быть быстрой альтернативой, если вам просто нужен этот тип сборки:

./gradlew :app:packageDebugUniversalApk

Эта задача сгенерирует (по умолчанию) app/build/outputs/universal_apk/debug/app-debug-universal.apk.

Обновление июнь 2019 г.

Google представил на I / O общий доступ к приложениям для внутреннего использования , что позволяет легко тестировать ваши App Bundle и APK, включая отладочные сборки:

Благодаря внутреннему совместному использованию приложений вы можете быстро поделиться набором приложений или APK с внутренней командой и тестировщиками, загрузив APK или набор приложений на внутренняя страница загрузки совместного доступа к приложению.

person pfmaggi    schedule 27.02.2019
comment
@pfmaggi, нужно ли закачивать apk + aab в playstore, чтобы проверить как работает модуль спроса? - person Lucifer; 04.06.2019
comment
Нет, вам просто нужно загрузить Android App Bundle. Вы можете следить за этой таблицей кодов, чтобы узнать, как это сделать: codelabs.developers.google.com/codelabs/ - person pfmaggi; 05.06.2019
comment
@pfmaggi Как я могу поделиться этим для тестирования, а не для бета-тестирования Google Play Store? - person Chathura Wijesinghe; 28.06.2019
comment
Я обновил ответ информацией о внутреннем совместном использовании приложений. - person pfmaggi; 28.06.2019
comment
При генерации с параметром --mode=universal создается APK, внутри которого содержится другой APK, и только внутренний APK является правильным и может быть установлен на реальном устройстве. - person jazzyjester; 07.10.2019
comment
С помощью команды build-apks вы создаете архив APKS, который включает все файлы APK. Но поскольку вы создаете универсальный APK, внутри архива у вас есть только один APK плюс файл метаданных. - person pfmaggi; 07.10.2019
comment
есть ли способ извлекать приложения без указанной конфигурации устройства? только что нашел, можете просто использовать unzip :) - person jacoballenwood; 15.06.2021

Я нигде не вижу, чтобы это было задокументировано, но инструменты сборки Android Gradle включают в себя задачи по извлечению универсального APK для вас. Вы можете использовать что-то похожее на:

./gradlew :yourmodule:packageDebugUniversalApk

Под капотом он использует bundletool и делает по сути то же самое, что и другой ответ, но приятно иметь возможность делать это из Gradle.

person kabuko    schedule 25.09.2019
comment
Создает ли это apk со всеми модулями или только модулями, отмеченными <dist:fusing dist:include="true"/> - person May Rest in Peace; 24.07.2020
comment
В соответствии с полученным размером apk и проверкой времени выполнения для установленных модулей будут включены только модули с <dist:fusing dist:include="true"/>. - person Phil; 14.10.2020
comment
Да, включены только эти модули. Это указано в документах по bundletool: Примечание. Bundletool включает только функцию модули, которые указывают <dist:fusing dist:include="true"/> в своем манифесте в универсальном APK. - person kabuko; 14.10.2020

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

  1. Создайте свой файл aab из Android Studio, например: myapp-release.aab
  2. Выполните следующую команду:

java -jar путь / к / 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

  1. Будет создан файл myapp.apks
  2. Ниже приведена команда для создания универсального apk

java -jar bundletool.jar build-apks --bundle = nhl.aab --output = nhl.apks --mode = универсальный

`

person Vivek Kumar Samele    schedule 12.11.2020
comment
Как собрать .apk файл? - person PhongBM; 08.06.2021
comment
Пожалуйста, выполните указанные выше шаги, это даст вам полный APK, включающий все модули. - person Vivek Kumar Samele; 30.06.2021