1

Per среды Android Gradle построить:Пользовательских активный аромат конкретного Gradle задач, включенные в процессе сборки

В настоящее время я прочитал мой код версии, версию и название от местной version.properties файл через «readVersions» Gradle задачу. Я в процессе добавления вкусов в свое приложение. Эти ароматы потребуют разных версий. Поэтому я подумывал о создании двух разных файлов version.properties внутри специфических каталогов вкуса (например, one/version.properties, two/version.properties) рядом со списками «res» и «src», специфичными для вкуса.

У меня есть задача readVersions:

task readVersions() { 
    def Properties versionProps = new Properties() 
    def versionPropsFile = file('version.properties') 
    if (versionPropsFile.exists()) 
     versionProps.load(new FileInputStream(versionPropsFile)) 
    def v_code = (versionProps['VERSION_CODE'] ?: "0").toInteger() 
    def v_name = versionProps['VERSION_NAME'] 

    // Set 
    versionCode v_code 
    versionName v_name 
} 

project.afterEvaluate { 
    preBuild.dependsOn readVersions 
} 

Я хотел бы иметь новую readVersions задачу, которая включает в себя вкус, так что я могу использовать его при обращении к файлу «version.properties» в «аромат» каталог.

Я пробовал:

android.productFlavors.all{ flavor -> 
    task ("${flavor.name}_readVersions")<<{ 
    def versionPropsFile = file(flavor.name+'/version.properties') 
... 

Но тогда я не знаю, как получить только задачи активного аромата, чтобы работать во время «preBuild» шаг.

Концептуально Я хочу это:

project.afterEvaluate { 
    preBuild.dependsOn ${active_flavor}_readVersions 
} 

Для тех, кто рекомендует реорганизовать и найти проще решения. Мой процесс сборки в настоящее время имеет другие зависимости от этих файлов version.properties. Я мог просто определить код версии и название версии в двух местах (например, внутри «вкус», а также в файле version.properties отдушки, но я действительно хочу СУХИХ конфиги)

+0

Нет «активного аромата». Ваш файл 'build.gradle' не создает ваше приложение. Ваш файл 'build.gradle' создает объектную модель * how * для создания вашего приложения. Строит работу с объектной моделью. Вам нужно «dependOn» для обоих вкусов, где соответствующие специфичные для аромата задачи зависят от ваших специфических специфических задач. – CommonsWare

+0

Да, я это понимаю. Вот почему я попытался подчеркнуть эту часть в моем «концептуальном» дескрипторе. Вы понимаете, что я пытаюсь сделать? Вы знаете, как создать объектную модель, которая достигает того, что я пытаюсь сделать? Я могу попытаться определить свою цель дальше, если нет. – FishStix

+0

Я не решаюсь создать кучу пользовательских «dependOn» для ароматов, где соответствующие специфичные для аромата задачи зависят от ваших индивидуальных специфических задач. Что делать, если я получаю 10 или 20 ароматов? Я просто хочу захватить локальную версию Code/Name из файла $ {flavor.name} /version.properties. Для этого мне действительно нужны 20 пользовательских задач? – FishStix

ответ

0

Я разделил мой " readVersions»задача в "readVersionName" и "readVersionCode"

def getVersionName(flavor) { 
    return getVersion(flavor, "VERSION_NAME", false) 
} 
def getVersionCode(flavor) { 
    return getVersion(flavor, "VERSION_CODE", true) 
} 
def getVersion(flavor, type, intRequired) { 
    // READ 
    def Properties versionProps = new Properties() 
    def versionPropsFile = file("${flavor}/version.properties") 
    if (versionPropsFile.exists()) 
     versionProps.load(new FileInputStream(versionPropsFile)) 
    def value = versionProps["${type}"] 
    return intRequired ? value.toInteger() : value 
} 

Тогда я запускаю их в определении каждого аромата в:

productFlavors { 
    one { 
     versionName getVersionName("one") 
     versionCode getVersionCode("one") 
    } 
    two { 
     versionName getVersionName("two") 
     versionCode getVersionCode("two") 
    } 

Одна вещи, чтобы отметить, мой пред Попытка попытаться включить параметр versionName и versionCode в зависимости от задачи preBuild. Похоже, что к этому времени в процессе «versionName» больше не может быть правильно настроен. Мои задачи не устанавливали его из правильного вкуса, поэтому я придумал другое решение, но, прочитав его после установки, он всегда был «нулевым».

Спасибо CommonsWare за комментарии и предложения.