Android Gradle - отправить переменную в зависимость - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть модули Gradle: модуль приложения и библиотеки libApp.У каждого из них есть собственный файл Gradle.app.gradle:

productFlavors {
     prod {somevariable = false}
     debug {somevariable = true}
}

dependencies {
    implementation project(':libApp')
}

И libApp.gradle:

defaultConfig {
    buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", somevariable
}

Как заставить gradle компилировать проект libApp в модуле приложения с некоторой переменной, зависящей от вкуса продукта?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете сделать это с помощью ароматов.

В build.gradle модуля библиотеки определите размер аромата, соответствующий значению переменной:

android {
    /* ... */

    flavorDimensions "someVar"

    productFlavors {
        someVarTrue {
            dimension "someVar"
            buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", 'true'
        }

        someVarFalse {
            dimension "someVar"
            buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", 'false'
        }
    }
}

В сборке модуля приложения.gradle, определите, какой вариант приложения должен использовать какой вариант библиотеки:

android {
    /* ... */

    flavorDimensions "environment"

    productFlavors {
        prod {
            dimension "environment"
        }

        dev {
            dimension "environment"
        } // note: naming a flavor "debug" might create a conflict with the default "debug" configuration
    }
}

dependencies {
    /* ... */
    prodImplementation project(path: ':libApp', configuration: 'someVarTrue')
    devImplementation project(path: ':libApp', configuration: 'someVarFalse')
}

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

0 голосов
/ 24 сентября 2018

Вы можете создать ext блок на уровне вашего проекта build.gradle, который инкапсулирует пользовательские свойства и делает их доступными для всех модулей в проекте.

ext {
    somevariable = true
}

При доступе к нему вы можете просто

defaultConfig {
    buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", ext.somevariable
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...