web-dev-qa-db-ja.com

Android StudioのGradleでGoogle Maps APIキーを管理する

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]" />
-->
49
Hrk

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つしかなく、ビルドタイプに基づいて値を設定します。お役に立てれば。

106
bond

マニフェストプレースホルダー機能でこれを実現できます: 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}"/>

それは、異なるフレーバーの異なるキーにとって正確なことであり、これは文字列リソースを使用するよりもクリーンなソリューションです。

24
IlyaEremin

Android Studio(バージョン0.8.11でチェック))では、Googleマップアクティビティ(新規-> Google-> Googleマップアクティビティ)をプロジェクトに追加でき、Android = studioは必要なファイルを生成します、キーを挿入するだけで、指示も生成されますdebug/res/values /およびrelease/res/valuesフォルダーでgoogle_maps_api.xmlファイルを探します。

13
Okas

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ファイルがあります。これらの新しいマニフェストには完全な情報を含めず、その特定のバリアントに必要なものについて一意なものだけを含めます。ソースファイルは次のようになります。

Screenshot of project directory structure showing multiple manifest files

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フレーバーを設定し、代わりにそのように分割できます。マニフェストのオーバーライドも同じように機能します。

11
Scott Barta