8

Ich versuche, mit google-services.json und verschiedenen Geschmacksrichtungen zu tun. Die Dokumentation besagt, dass wir die Datei im Stammordner benötigen.Gradle erhalten aktuelle Geschmack für eine bestimmte Aufgabe

bekam ich eine Aufgabe, die Datei aus dem Geschmack Ordner in den Stammordner leicht kopieren können:

task CopyToRoot(type: Copy) { 
    def appModuleRootFolder = '.' 
    def srcDir = 'src' 
    def googleServicesJson = 'google-services.json' 

    outputs.upToDateWhen { false } 
    def flavorName = android.productFlavors.flavor1.name 

    description = "Switches to $flavorName $googleServicesJson" 
    delete "$appModuleRootFolder/$googleServicesJson" 
    from "${srcDir}/$flavorName/" 
    include "$googleServicesJson" 
    into "$appModuleRootFolder" 
} 

Dann wird in der afterEvaluate zwinge ich

afterEvaluate { 
    processFlavor1DebugGoogleServices.dependsOn CopyToRoot 
    processFlavor1ReleaseGoogleServices.dependsOn CopyToRoot 
} 

Dies funktioniert nur für 1 Geschmack (statisch definiert) Wie macht man das für jeden Geschmack? Ich habe 4 Geschmacksrichtungen. Wie bekomme ich den aktuellen Geschmack, der gerade kompiliert wird?

[UPDATE 1] - auch versucht:

task CopyToRoot(type: Copy) { 
    def appModuleRootFolder = '.' 
    def srcDir = 'src' 
    def googleServicesJson = 'google-services.json' 

    outputs.upToDateWhen { false } 
    def flavorName = android.productFlavors.flavor1.name 

    android.applicationVariants.all { variant -> 
     def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName() 
     println('flavorString: ' + flavorString) 

     description = "Switches to $flavorString $googleServicesJson" 
     delete "$appModuleRootFolder/$googleServicesJson" 
     from "${srcDir}/$flavorString/" 
     include "$googleServicesJson" 
     into "$appModuleRootFolder" 
    } 
} 

Aber dies die richtige Datei nicht kopiert wird. Irgendeine Hilfe?

+0

@CommonsWare jede alternative Lösung? Wie man es dynamisch macht? –

Antwort

5

Ein Weg zu gehen, ist ein Ordner mit dem Namen "Google-Dienste" in jedem Geschmack zu schaffen, sowohl die Debug-Version und die Release-Version der JSON-Datei enthält:

enter image description here

Im buildTypes Abschnitt dies Ihre gradle Datei hinzufügen:

applicationVariants.all { variant -> 
     def buildTypeName = variant.buildType.name 
     def flavorName = variant.productFlavors[0].name; 

     def googleServicesJson = 'google-services.json' 
     def originalPath = "src/$flavorName/google-services/$buildTypeName/$googleServicesJson" 
     def destPath = "." 

     copy { 
      if (flavorName.equals(getCurrentFlavor()) && buildTypeName.equals(getCurrentBuildType())) { 
       println originalPath 
       from originalPath 
       println destPath 
       into destPath 
      } 
     } 
    } 

Es wird die richtige jSON-Datei im Stammverzeichnis Ihres App-Modul automatisch kopieren, wenn Sie Build-Variante wechseln werden.

Fügen Sie die beiden Methoden aufgerufen, diese ich Antwort meine answer

+0

Danke, habe meinen Tag gerettet. – sector11

1

den aktuellen Geschmack und aktuellen Build-Typ an der Wurzel Ihrer build.gradle

def getCurrentFlavor() { 
    Gradle gradle = getGradle() 
    String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() 

    Pattern pattern; 

    if(tskReqStr.contains("assemble")) 
     pattern = Pattern.compile("assemble(\\w+)(Release|Debug)") 
    else 
     pattern = Pattern.compile("generate(\\w+)(Release|Debug)") 

    Matcher matcher = pattern.matcher(tskReqStr) 

    if(matcher.find()) { 
     println matcher.group(1).toLowerCase() 
     return matcher.group(1).toLowerCase() 
    } 
    else 
    { 
     println "NO MATCH FOUND" 
     return ""; 
    } 
} 

def getCurrentBuildType() { 
    Gradle gradle = getGradle() 
    String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() 

     if (tskReqStr.contains("Release")) { 
      println "getCurrentBuildType release" 
      return "release" 
     } 
     else if (tskReqStr.contains("generateDebug")) { 
      println "getCurrentBuildType debug" 
      return "debug" 
     } 

    println "NO MATCH FOUND" 
    return ""; 
} 

Basierend zu bekommen gefunden. Google unterstützt schließlich verschiedene google-services.json pro Flavor. Sie müssen das Plugin nur auf com.google.gms: google-services: 2.0.0 aktualisieren. Sie müssen die JSON-Datei nicht in den App-Ordner kopieren. Fügen Sie einfach Ihre google-services.json-Dateien in Ihre Build-Flavor-Verzeichnisse ein.