8

Sto cercando di gestire google-services.json e diversi sapori. La documentazione dice che abbiamo bisogno del file nella cartella principale.Gradle ha un sapore attuale per un'attività specifica

ho avuto un compito che può facilmente copiare il file dalla cartella sapore alla cartella principale:

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

Poi, nel afterEvaluate forzo

afterEvaluate { 
    processFlavor1DebugGoogleServices.dependsOn CopyToRoot 
    processFlavor1ReleaseGoogleServices.dependsOn CopyToRoot 
} 

Questo funziona solo per 1 sapore (definito staticamente). Come farlo per ogni gusto? Ho 4 sapori. Come ottenere il sapore attuale che viene compilato?

[UPDATE 1] - cercato anche:

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

Ma questo non copia il file corretto. Qualsiasi aiuto?

+0

@CommonsWare qualsiasi soluzione alternativa? Come farlo in modo dinamico? –

risposta

5

Una strada da percorrere è quella di creare una cartella denominata "google-servizi" in ogni sapore, contenente sia la versione di debug e la versione del file JSON:

enter image description here

Nella sezione buildTypes del file Gradle, aggiungere questo:

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

sarà copiare il file jSON destra alla radice del modulo applicazione automaticamente quando si passa la variante build.

Aggiungi i due metodi chiamati per ottenere il sapore attuale e tipo di generazione corrente alla radice del vostro 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 ""; 
} 

Sulla base di questa answer

+0

Grazie, mi hai salvato la giornata. – sector11

1

ho trovato la mia risposta. Google finalmente supporta diversi google-services.json per sapore. Devi solo aggiornare il plug-in su com.google.gms: google-services: 2.0.0. Non è necessario copiare il file json nella cartella dell'app, basta mettere i tuoi file google-services.json diversi all'interno delle directory dei sapori di build.

Problemi correlati