Пакет приложений отличается от APK тем, что его нельзя развернуть на устройстве. Скорее, это формат публикации, который включает в себя весь скомпилированный код и ресурсы вашего приложения в одном артефакте сборки. Итак, после того как вы загрузите подписанный пакет приложений, в Google Play появится все необходимое для создания и подписания APK-файлов вашего приложения и предоставления их пользователям.
Начать
Большинству проектов приложений не потребуется много усилий для поддержки пакетов приложений Android. Это связано с тем, что модуль, включающий код и ресурсы для базового APK-файла вашего приложения, является стандартным модулем приложения, который вы получаете по умолчанию при создании нового проекта приложения в Android Studio . То есть модуль, который применяет указанный ниже плагин application
к своему файлу build.gradle
, предоставляет код и ресурсы для базовой функциональности вашего приложения.
классный
// The standard application plugin creates your app's base module. plugins { id 'com.android.application' }
Котлин
plugins { // The standard application plugin creates your app's base module. id("com.android.application") }
Помимо предоставления основных функций вашего приложения, базовый модуль также предоставляет множество конфигураций сборки и записей манифеста, которые влияют на весь проект приложения.
Конфигурация сборки базового модуля
Для большинства существующих проектов приложений вам не нужно ничего менять в конфигурации сборки базового модуля. Однако, если вы планируете добавить функциональные модули в свой проект приложения или если вы ранее выпустили свое приложение с использованием нескольких APK, существуют некоторые аспекты конфигурации сборки базового модуля, о которых вам следует помнить.
Код версии и обновления приложения
Благодаря пакетам Android App Bundle вам больше не придется управлять кодами версий нескольких APK-файлов, которые вы загружаете в Google Play. Вместо этого вы управляете только одним кодом версии в базовом модуле вашего приложения, как показано ниже:
// In your base module build.gradle file
android {
defaultConfig {
…
// You specify your app’s version code only in the base module.
versionCode 5
versionName "1.0"
}
}
После загрузки пакета приложения Google Play использует код версии в вашем базовом модуле, чтобы назначить один и тот же код версии всем APK-файлам, созданным из этого пакета. То есть, когда устройство загружает и устанавливает ваше приложение, все разделенные APK-файлы этого приложения имеют один и тот же код версии.
Если вы хотите обновить свое приложение новым кодом или ресурсами, вам необходимо обновить код версии в базовом модуле вашего приложения и создать новый полный пакет приложения. Когда вы загружаете этот пакет приложений в Google Play, он генерирует новый набор APK на основе кода версии, указанного базовым модулем. Впоследствии, когда пользователи обновляют ваше приложение, Google Play предоставляет им обновленные версии всех APK-файлов, установленных в настоящее время на устройстве. То есть все установленные APK обновляются до кода новой версии.
Другие соображения
- Подписание приложения. Если вы включаете информацию о подписи в файлы сборки, вам следует включать ее только в файл конфигурации сборки базового модуля. Дополнительные сведения см. в разделе Настройка Gradle для подписи вашего приложения .
- Сжатие кода. Если вы хотите включить сжатие кода для всего проекта приложения (включая его функциональные модули), вы должны сделать это из файла build.gradle базового модуля. То есть вы можете включить пользовательские правила ProGuard в функциональный модуль, но свойство
minifyEnabled
в конфигурациях сборки функционального модуля игнорируется. - Блок
splits
игнорируется: при создании пакета приложения Gradle игнорирует свойства в блокеandroid.splits
. Если вы хотите контролировать, какие типы APK-файлов конфигурации поддерживает ваш пакет приложений, вместо этого используйтеandroid.bundle
, чтобы отключить типы APK-файлов конфигурации . - Управление версиями приложения. Базовый модуль определяет код версии и имя версии для всего проекта приложения. Для получения дополнительной информации перейдите в раздел «Как управлять обновлениями приложений» .
Повторное включение или отключение типов конфигурационных APK
По умолчанию при создании пакета приложения он поддерживает создание APK-файлов конфигурации для каждого набора языковых ресурсов, ресурсов плотности экрана и библиотек ABI. Используя блок android.bundle
в файле build.gradle
вашего базового модуля, как показано ниже, вы можете отключить поддержку одного или нескольких типов APK-файлов конфигурации:
классный
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
Котлин
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
Обработка изменений языка
Google Play определяет, какие языковые ресурсы установить вместе с приложением, на основе выбора языка в настройках устройства пользователя. Представьте себе пользователя, который меняет язык системы по умолчанию после загрузки вашего приложения. Если ваше приложение поддерживает этот язык, устройство запрашивает и загружает дополнительные APK-файлы конфигурации для этих языковых ресурсов из Google Play.
Для приложений, которые предлагают выбор языка внутри приложения и динамически меняют язык приложения, независимо от настроек языка на уровне системы, необходимо внести некоторые изменения, чтобы предотвратить сбои из-за отсутствия ресурсов. Либо установите для свойства android.bundle.language.enableSplit
значение false
, либо рассмотрите возможность загрузки языков по требованию с помощью библиотеки Play Core, как описано в разделе Загрузка дополнительных языковых ресурсов.