2016-03-07 30 views
5

Ho due ambienti del mio progetto uno Prod un altro è Staging. Quindi ogni volta che devo creare uno qualsiasi dell'ambiente, devo cambiare più chiavi come la chiave della mappa, il nome dell'etichetta e altre cose in manifest. Così ho cercato e trovato alcune delle soluzioni e manifestPlaceholders è uno di loro.Studio Android - Assegnazione di più valori a ManifestPlaceholders in Gradle

Ora quello che voglio fare è assegnare più valori in manifestPlace. Quindi posso inserire più valori e sì, quindi come inserire più valori in esso. Ecco il codice per le manifestPlaceholders

buildTypes { 
    debug { 
     manifestPlaceholders = [ google_map_key:"your_dev_key"] 
    } 
    release { 
     manifestPlaceholders = [ google_map_key:"prod_key"] 
    } 
} 

risposta

11

Ho risolto il mio problema, come di seguito il codice aggiungendo più manifestPlaceholders valori. Aggiunto questo al mio modulo build.gradle.

productFlavors { 
     staging { 
      applicationId "xxxxxxxxxxx" 
      manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"] 
      buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"' 
     } 
     prod { 
      applicationId "xxxxxxxxxxx" 
      manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"] 
      buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"' 
     } 
    } 

EDIT: È possibile utilizzare anche come resValue Emanuel Moecklin suggerito nei commenti.

productFlavors { 
      staging { 
       applicationId "xxxxxxxxxxx" 
       manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"] 
       buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"' 
       resValue "string", "base_url", "xxxxxxxxxx" 
      } 
      prod { 
       applicationId "xxxxxxxxxxx" 
       manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"] 
       buildConfigField 'String', 'BASE_URL', '"xxxxxxxxxx"' 
       resValue "string", "base_url", "xxxxxxxxxx" 
      } 
     } 
+2

Questa è solitamente la soluzione preferita, ma ho appena inciampato in un incredibile problema fastidioso. Se il valore del segnaposto è un numero (come 15762790467376475), Gradle lo converte in Float e non in String, nel qual caso il valore nel manifest sarà qualcosa come 1.57627904E15). L'uso di resValue al posto di manifestPlaceholders risolve questo problema. –

1

ho citato sia per costruire tipi e sapori

buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     resValue "string", "google_maps_key", "release google map key" 
    } 
    debug { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     resValue "string", "google_maps_key", "debug google map key" 
    } 
} 
productFlavors { 
    alpha { 
     applicationId = "com.example.alpha" 
     resValue 'string', 'app_name', 'alphaapp' 
     resValue "string", "maps_api_key", "XXXXXXXXXXXXXXXXXXXXX" 
    } 
    beta { 
     applicationId = "com.example.beta" 
     resValue 'string', 'app_name', 'betaapp' 
     resValue "string", "maps_api_key", "XXXXXXXXXXXXXXXXXXXXXX" 
    } 
} 
+0

Non può essere possibile utilizzando ** ** manifestPlaceholders – Pankaj

+0

dispiace non lo so –

+0

Si può fare, basta scrivere 'manifestPlaceholders = [chiave: "@ stringa/valore"]', vedere https://stackoverflow.com/a/36554080/3997741 – vonox7

6

È possibile impostare/modificare più valori manifestPlaceholders. È possibile definire tutti i valori contemporaneamente, come nella risposta o uno alla volta.

defaultConfig { 
    // initialize more values 
    manifestPlaceholders = [ google_map_key:"xxxxxxxxxx", app_label_name:"xxxxxxx"] 
    // or this way 
    manifestPlaceholders.google_map_key = "xxxxxxxxxx" 
    manifestPlaceholders.app_label_name = "xxxxxxxxxx" 
} 

productFlavors { 
    staging { 
    } 
    prod { 
     // use some different value for prod 
     manifestPlaceholders.google_map_key = "yyyyyyyyyy" 
    } 
}