Edward Dale
Edward Dale

Reputation: 30133

Getting package name of application variant in gradle plugin

I'm building a gradle plugin that adds a new task for every application variant. This new task needs the package name of the application variant.

This is my current code, which stopped working with the most recent version of the android gradle plugin:

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
}

This has stopped working in the most recent version of the android plugin because of changes to the build config processing. It seemed like a hack before anyway, so I'm not surprised it stopped working. Is there a canonical way to fetch the package name?

Upvotes: 15

Views: 11088

Answers (3)

riwnodennyk
riwnodennyk

Reputation: 8258

This will handle nullable applicationIdSuffix for you:

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

Upvotes: 2

ivacf
ivacf

Reputation: 1173

The only way I found was to define packageName in the project's build.gradle and then from the plugin do project.android.defaultConfig.packageName.

If the project has flavors that define their own package then the solution stated by stealthcopter would work.

However a plugin is meant to work with any project regarless whether packageName is defined or not in build.gradle so these solutions are far from ideal.

Let me know if you find something better.

Upvotes: 4

stealthcopter
stealthcopter

Reputation: 14196

I use this:

// 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
}

Upvotes: 6

Related Questions