android-gradle
Настройка продуктов
Поиск…
замечания
defaultConfig
продукта поддерживают те же свойства, что и defaultConfig
потому что defaultConfig фактически принадлежит классу ProductFlavor. Это означает, что вы можете предоставить базовую конфигурацию для всех вкусов в defaultConfig {}
, и каждый вкус может переопределить любые из этих значений по умолчанию, например, pplicationId
.
Как настроить файл build.gradle
android {
...
defaultConfig {...}
buildTypes {...}
productFlavors {
demo {
applicationId "com.example.myapp.demo"
versionName "1.0-demo"
}
full {
applicationId "com.example.myapp.full"
versionName "1.0-full"
}
}
}
Константы и ресурсы вкуса в build.gradle
Вы можете использовать градуировку, чтобы иметь константы BuildConfig
и значения res
для каждого вкуса. Просто добавьте значение к вкусу, который вы хотите поддержать.
android {
defaultConfig {
resValue "string", "app_name", "Full App"
buildConfigField "boolean", "isDemo", "false"
}
productFlavors {
demo {
resValue "String", "app_name", "Demo App"
buildConfigField "boolean", "isDemo", "true"
}
full {
// use default values
}
}
}
Gradle сделает все слияние / переопределение для вас. Сгенерированный код также позволит вам увидеть, откуда взялись значения, например
<!-- Values from default config. -->
<string name="app_name" translatable="false">Default Name</string>
а также
public final class BuildConfig {
public static final String VERSION_NAME = "1.0";
// Fields from product flavor: demo
public static final boolean isDemo = true;
}
Использование вкуса
Когда приложение основано на нескольких критериях, вместо создания большого количества вкусов вы можете определить размеры аромата.
Размеры аромата определяют декартовую продукцию, которая будет использоваться для производства вариантов.
Пример:
flavorDimensions("dimA", "dimB")
productFlavors {
row1 {
...
dimension = "dimA"
}
row2 {
...
dimension = "dimA"
}
row3 {
...
dimension = "dimA"
}
col1 {
...
dimension = "dimB"
}
col2 {
...
dimension = "dimB"
}
col3 {
...
dimension = "dimB"
}
}
Эта конфигурация будет создавать 18 (3 3 2) варианта (если у вас есть 2 стандартных типа сборки: debug
и release
). Будут созданы следующие варианты сборки:
row1-col1-debug
row1-col2-debug
row1-col3-debug
row1-col1-release
row1-col2-release
row1-col3-release
row2-col1-debug
row2-col2-debug
row2-col3-debug
row2-col1-release
row2-col2-release
row2-col3-release
row3-col1-debug
row3-col2-debug
row3-col3-debug
row3-col1-release
row3-col2-release
row3-col3-release
Порядок измерения определяется параметрами android.flavorDimensions
и дисками, которые отдают предпочтение другому , что важно для ресурсов, когда значение в ароматизаторе заменяет значение, определенное в аромате с более низким приоритетом.
Размер аромата сначала определяется с более высоким приоритетом. Итак, в этом случае:
dimA > dimB > defaultConfig
Существует также папка источника «ароматизатор», когда используется более одного вкусового размера. Например, src/flavor1Flavor2/
.
- Обратите внимание, что это для всех комбинаций всех измерений.
- Его приоритет выше, чем источники с уникальным вкусом, но ниже, чем типы сборки.
Добавить зависимости для вкусов
Вы можете добавить разные зависимости для конкретного продукта.
Просто используйте команду <flavorName>Compile 'group:name:xyz'
syntax:
android {
...
productFlavors {
flavor1 {
//.....
}
flavor2 {
//.....
}
}
}
...
dependencies {
compile 'com.android.support:appcompat-v7:24.2.0'
// Add a dependency only for flavor1
flavor1Compile 'group:name:x.y.z'
// Add a dependency only for flavor2
flavor2Compile 'group:name:x.y.z'
}
Пример разработки и производства продуктов
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 15
}
}