在gradle插件中获取应用程序变体的包名称

时间:2014-01-07 13:46:27

标签: android gradle android-gradle

我正在构建一个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插件中工作。无论如何它似乎是一个黑客,所以我不会感到惊讶它停止工作。是否有规范的方法来获取包名称?

3 个答案:

答案 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 
}