Поиск…


замечания

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
        }
    }


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow