我正在构建一个gradle插件,为每个应用程序变体添加一个新任务。此新任务需要应用程序变体的包名称。
这是我目前的代码,它停止使用最新版本的android gradle插件:
private String getPackageName(ApplicationVariant variant) {
// TODO: There's 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插件中工作。无论如何它似乎是一个黑客,所以我不会感到惊讶它停止工作。是否有规范的方法来获取包名称?
答案 0 :(得分:5)
我用这个:
// 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
}
答案 1 :(得分:3)
我找到的唯一方法是在项目的packageName
中定义build.gradle
,然后从插件中project.android.defaultConfig.packageName
定义packageName
。
如果项目具有定义自己的包的风味,那么stealthcopter所述的解决方案将起作用。
然而,无论build.gradle
中是否定义了{{1}},插件都适用于任何项目,因此这些解决方案远非理想。
如果你找到更好的东西,请告诉我。
答案 2 :(得分:2)
这将为你处理可以为空的applicationIdSuffix
:
android.applicationVariants.all { variant ->
def applicationId = [variant.mergedFlavor.applicationId, variant.buildType.applicationIdSuffix].findAll().join()
println applicationId
}