2014-01-07 8 views
12

Ich baue ein Gradle-Plugin, das eine neue Aufgabe für jede Anwendungsvariante hinzufügt. Diese neue Aufgabe benötigt den Paketnamen der Anwendungsvariante.Paketname der Anwendungsvariante in Gradle-Plugin erhalten

Dies ist mein aktueller Code, der mit der neuesten Version der Android gradle Plugin funktionierte nicht mehr:

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 
} 

Dies hat in der neuesten Version der Android-Plugin, um den Build aufgrund von Änderungen aufgehört zu arbeiten Konfigurationsverarbeitung. Es schien sowieso schon wie ein Hack, also bin ich nicht überrascht, dass es aufgehört hat zu arbeiten. Gibt es eine kanonische Möglichkeit, den Paketnamen abzurufen?

Antwort

5

Ich benutze diese:

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

In Android Gradle Plugin Version 0.11 (und aufwärts), '' packageNameSuffix' zu applicationIdSuffix' geändert hat –

2

Der einzige Weg, ich war gefunden packageName im Projekt zu definieren build.gradle und dann aus dem Plugin tun project.android.defaultConfig.packageName.

Wenn das Projekt Aromen hat, die ein eigenes Paket definieren, dann würde die von stealthcopter angegebene Lösung funktionieren.

Ein Plugin ist jedoch mit jedem Projekt unabhängig davon, ob packageName definiert ist oder nicht in build.gradle so diese Lösungen sind weit davon entfernt, ideal.

Lassen Sie mich wissen, ob Sie etwas besseres finden.

2

Dies wird auf NULL festlegbare applicationIdSuffix für Sie erledigen:

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