Получение имени пакета приложения в плагине 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
}