Как получить доступ к buildConfigField в другом месте внутри файла сборки gradle

Я пытаюсь установить buildConfigField в своем блоке productFlavor, а затем ссылаюсь на это поле в другом месте в моем файле сборки gradle, чтобы я мог использовать это значение при создании имени для моего apk.

e.g

productFlavors{
    flavor1{            
        buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor1"'

    }
    flavor2{            
        buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor2"'

    }

Как я могу получить доступ к APP_FLAVOR_NAME в другом месте моего скрипта build.gradle?

Я также изо всех сил пытаюсь понять, как просто ссылаться на само имя аромата в скрипте сборки в качестве еще одного варианта построения имени apk. Как я могу сделать это также?


person JohnRock    schedule 12.04.2014    source источник


Ответы (2)


Добавление buildConfigField записывает запись в ваш файл BuildConfig.java и не предназначено для отображения на уровне скрипта сборки. Это способ предоставить метаинформацию о конкретной сборке интересующему коду приложения, а не другому коду скрипта сборки. Если вы хотите использовать имена на уровне скрипта сборки, вам нужно будет использовать свойства Gradle.

В явном виде, если вы хотите получить доступ к коллекции объектов BuildConfigField в другом месте вашего скрипта, вы можете использовать android.productFlavors.flavor1.buildConfigFields.

Изменить

Чтобы получить конкретное имя аромата при повторении android.applicationVariants.all, вы можете перебирать коллекцию ароматов следующим образом (обратите внимание, что вам не нужно фиксировать ссылку на элемент, который вы итерируете, но поучительно видеть, какие объекты вы на самом деле доступ):

task printFlavors << {
    println "BuildTypes ⨯ Flavors:"
    android.applicationVariants.all { variant ->
        println name
        variant.productFlavors.each { flavor ->
            println flavor.name
        }
    }
}

Или, как предлагает kcoppock, это можно упростить до:

task printFlavorName << {
    android.applicationVariants.all {
        println flavorName
    }
}
person dcow    schedule 12.04.2014
comment
Не могли бы вы предложить предпочтительный способ ссылки на название вкуса продукта текущего варианта, если бы вы перебирали android.applicationVariants.all ? - person JohnRock; 12.04.2014
comment
Эм, я думаю, что это name. - person dcow; 12.04.2014
comment
О, теперь я вижу, чего ты хочешь. name относится к варианту. Чтобы получить название вкуса, вам понадобится что-то вроде редактирования выше. - person dcow; 12.04.2014
comment
Вариант @dcow @JohnRock также имеет поле flavorName, которое вы можете использовать. Я использую его лично для именования выходов APK, и я уверен, что это то, что вы ищете. :) - person Kevin Coppock; 12.04.2014
comment
@kcoppock, это действительно полезно, я полностью пропустил тот последний раз, когда я просматривал плагин Android Gradle .. - person dcow; 12.04.2014
comment
Было бы неплохо, если бы для этих вещей было лучшее автозаполнение или документация, но я уверен, что это придет со временем. - person Kevin Coppock; 12.04.2014
comment
Да, так как автозаполнение не всплывает, я не нашел его, но я получил правильное свойство, используя ${variant.flavorName} - person JohnRock; 12.04.2014

Хотелось бы добавить к ответу dcow.

После получения аромата, чтобы получить поле BuildConfig:

variant.productFlavors.each { flavor ->
    flavor.buildConfigFields.each { key, value ->
        if(key == "APP_FLAVOR_NAME") {
            println value.type
            println value.name
            println value.value
        }    
    }
}

BuildConfigs определяются как окончательный класс. Поля являются частными. Так что только для чтения.

person shailesh mota    schedule 02.09.2017