web-dev-qa-db-ja.com

Android Studio-GradleのManifestPlaceholdersに複数の値を割り当てる

私のプロジェクトには2つの環境がありますProd別の環境はStagingです。そのため、環境を構築する必要があるときはいつでも、マップキー、ラベル名など、マニフェスト内の複数のキーを変更する必要があります。だから私はいくつかの解決策を検索して見つけましたmanifestPlaceholdersはそれらの1つです。

次に、manifestPlaceholdersに複数の値を割り当てます。だから私はそれに複数の値を入れることができますか、そしてはいどのようにそれに複数の値を入れるのですか?これがmanifestPlaceholdersのコードです。

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

複数の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"'
        }
    }

編集:コメントで推奨されるEmanuel MoecklinとしてresValueを使用することもできます。

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

複数のmanifestPlaceholders値を簡単に設定/変更できます。回答のように一度にすべての値を定義することも、1つずつ定義することもできます。

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

ビルドタイプとフレーバーの両方について言及しました

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