2016-03-07 14 views
5

私のプロジェクトの環境は2種類ありますプロダクトもう1つはステージングです。ですから、環境を構築しなければならないときは、地図キー、ラベル名などの複数のキーをマニフェスト内で変更する必要があります。だから私は検索し、いくつかの解決策を見つけてマニフェストプレースホルダの1つです。Androidスタジオ - Gradleのマニフェストプレースホルダに複数の値を割り当てる

ここでは、マニフェストプレースホルダに複数の値を割り当てたいと考えています。だから私はそれに複数の値を置くことができますし、はい、それで複数の値を入れる方法。ここで私は両方のために言及しているmanifestPlaceholders

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

答えて

11

を構築している私は、複数のmanifestPlaceholders値を追加することで、コード以下のように私の問題を解決しました。これを私のモジュール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: Emanuel Moecklinはコメントで示唆されているようにまたresValueを使用することができます。

+2

これは通常、推奨される解決策ですが、私は信じられない厄介な問題を乗り越えました。プレースホルダーの値が数字(15762790467376475など)の場合、GradleはそれをFloatに変換し、Stringではなく、マニフェストの値は1.57627904E15のような値になります。マニフェストプレースホルダの代わりにresValueを使用すると、この問題は解決されます。 –

1

のコードがタイプと味

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

はそれが** manifestPlaceholdersを使用して可能にすることはできません。** – Pankaj

+0

申し訳ありませんが、私はちょうど 'manifestPlaceholders =書き、それを行うことができるという –

+0

について知らない:' [キー「@文字列/値」]、 https://stackoverflow.com/a/36554080/3997741 – vonox7

6

マニフェストプレースホルダの複数の値を簡単に設定/変更できます。あなたは、あなたの答えのように、一度にすべての値を定義することもできますし、ひとつずつ定義することもできます。

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" 
    } 
} 
関連する問題