Получение имени пакета приложения в плагине gradle

Я создаю плагин gradle, который добавляет новую задачу для каждого варианта приложения. Эта новая задача нуждается в имени пакета для варианта приложения.

Это мой текущий код, который перестает работать с самой последней версией плагина android gradle:

private String getPackageName(ApplicationVariant variant) {
    // TODO: There probably a better way to get the package name of the variant being tested.
    String packageName = variant.generateBuildConfig.packageName

    if (variant.processManifest.packageNameOverride != null) {
        packageName = variant.processManifest.packageNameOverride
    }
    packageName
}

Это перестало работать в последней версии плагина android из-за изменений в обработке конфигурации сборки. В любом случае это казалось взломом, поэтому я не удивлен, что он перестает работать. Есть ли канонический способ получить имя пакета?

Ответ 1

Я использую это:

// Return the packageName for the given buildVariant
def getPackageName(variant) {
    def suffix = variant.buildType.packageNameSuffix
    def packageName = variant.productFlavors.get(0).packageName
    if (suffix != null && !suffix.isEmpty() && suffix != "null") {
        packageName += suffix
    }
    return packageName
}

Ответ 2

Единственным способом, который я нашел, было определение packageName в проекте build.gradle, а затем из плагина do project.android.defaultConfig.packageName.

Если у проекта есть ароматы, которые определяют их собственный пакет, тогда решение, указанное stealthcopter, будет работать.

Однако плагин предназначен для работы с любым проектом без каких-либо ограничений: packageName определен или нет в build.gradle, поэтому эти решения далеки от идеала.

Сообщите мне, если вы найдете что-то лучшее.

Ответ 3

Это будет обрабатывать значение nullable applicationIdSuffix для вас:

android.applicationVariants.all { variant ->
    def applicationId = [variant.mergedFlavor.applicationId, variant.buildType.applicationIdSuffix].findAll().join()
    println applicationId 
}