Gradleは強力であり、Googleマップの開発/生産のためのAPIキーを管理したいと思っています
現在、私は常に1行を手動でコメントし、それを機能させるために他の行のコメントを外す必要があります。いくつかのカスタムリリース設定でGradleで自動的に行う方法はありますか?
<!-- MapView v2 API -->
<uses-library Android:name="com.google.Android.maps" />
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="[MY_DEV_KEY]" />
<!-- PROD
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="[MY_PROD_KEY]" />
-->
Gradleを使用しているため、次のことができます。
build.gradle
Android {
.. .. ...
buildTypes {
debug {
resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
}
release {
resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
}
}
}
そしてAndroidManifest.xml
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_api_key"/>
この方法では、AndroidManifest.xmlが1つしかなく、ビルドタイプに基づいて値を設定します。お役に立てれば。
マニフェストプレースホルダー機能でこれを実現できます: http://tools.Android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support
build.gradleファイル内:
buildTypes {
debug {
manifestPlaceholders = [ google_map_key:"your_dev_key"]
}
release {
manifestPlaceholders = [ google_map_key:"prod_key"]
}
}
そして、マニフェストで:
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="${google_map_key}"/>
それは、異なるフレーバーの異なるキーにとって正確なことであり、これは文字列リソースを使用するよりもクリーンなソリューションです。
Android Studio(バージョン0.8.11でチェック))では、Googleマップアクティビティ(新規-> Google-> Googleマップアクティビティ)をプロジェクトに追加でき、Android = studioは必要なファイルを生成します、キーを挿入するだけで、指示も生成されますdebug/res/values /およびrelease/res/valuesフォルダーでgoogle_maps_api.xmlファイルを探します。
Android Studioでは、ビルドタイプとフレーバーの概念があり、これらを使用して必要なものを取得できます。ビルドタイプは、機能的には同じですがデバッグが異なるアプリの異なるバージョンですコード。デフォルトでは、すべてのAndroid Gradleプロジェクトにはデバッグおよびリリースビルドタイプがあります。
フレーバーは、機能的に異なるアプリのバージョンです。たとえば、無料と有料を使用できます。デフォルトでは、Android Gradleプロジェクトにはフレーバーがありませんが、追加することができます。
ビルドの種類とフレーバーが組み合わされます(いわゆる 異形)ビルドを行うとき;この例では、freeDebug、freeRelease、payedDebug、およびpayedReleaseビルドを使用できます。
ビルドシステムを使用すると、各タイプ/フレーバー/バリアントの多くのものを簡単にオーバーライドできます。できることの1つは、AndroidManifest.xmlファイルの一部をオーバーライドすることです。ビルドシステムは、特定のバリアントをビルドするときに、マニフェストのさまざまな適格なビットを1つのマスターマニフェストにマージします。
その背景を手に入れて、あなたのケースでは、アプリのデバッグバージョンとリリースバージョンで異なるAPIキーを使用することができます。デバッグバージョンは、日々の開発、デバッグ、テストで使用するものであり、リリースバージョンは、ユーザーに展開するものです。
これをする、 しない src/main
内のメインアプリのAndroidManifest.xmlファイルにGoogle Maps APIキーを配置します。代わりに、2つの新しいフォルダーsrc/debug
およびsrc/release
を追加し、追加します スタブ そこにAndroidManifest.xmlファイルがあります。これらの新しいマニフェストには完全な情報を含めず、その特定のバリアントに必要なものについて一意なものだけを含めます。ソースファイルは次のようになります。
src/debug/AndroidManifest.xml
ファイルには次のものが含まれます。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android">
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="[MY_DEV_KEY]" />
</manifest>
そしてsrc/release/AndroidManifest.xml
は次のようになります:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android">
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="[MY_PROD_KEY]" />
</manifest>
繰り返しますが、src/main/AndroidManifest.xml
ファイルにはAPIキーを入れないでください。
何らかの理由でビルドタイプを使用して区別したくない場合は、devフレーバーとprodフレーバーを設定し、代わりにそのように分割できます。マニフェストのオーバーライドも同じように機能します。