44

I'm using Google Maps v2 API in my project. In Google Maps v2 the debug/release API key is defined in AndroidManifest.xml. I have seen the link but in that map key is defined in a xml layout file not in AndroidManifest.xml. So can I define both debug and release keys for my project in AndroidManifest.xml?

I want something like this in AndroidManifest.xml:

If debug mode:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/debug_map_api_key"/>

If release mode:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/release_map_api_key"/>
4

4 回答 4

68

使用 build.gradle

buildTypes {

    debug {
        buildConfigField("String", "map_api_key", "\"your debug map api key here\"")
    }
    release {
        buildConfigField("String", "map_api_key", "\"your release map api key here\"")
    }
}

我使用以下步骤解决了这个问题:

在 Google Developer API 控制台中

  1. 点击Create New Android key...
  2. 在 cmd.exe/终端中:keytool -list -v -keystore mystore.keystore
  3. 密码:android
  4. 现在进入SHA1 key;package name调试并按回车
  5. 进入SHA1 key;package name发布
  6. 点击Create

现在在您的项目中使用此 API 密钥

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/common_map_api_key"/>
于 2013-06-17T06:35:55.127 回答
32

在最新的 Android 5.0 和 Android 6.0、Android 9+ 中使用 build.gradle 文件的最佳方法之一(API 20、21、22、23、24、25、26、27 28、29)

好吧,您可以简单地使用它们,而无需在gradle. 这是另一个我们可以通过Gradle. 您可以通过两个简单的步骤来实现它。

  • 将自定义值添加到manifestplaceholdersbuild.gradle 文件。

见下文

buildTypes {
    debug {
        manifestPlaceholders = [ mapApiKeyValue:"GHjaSyAjlyp3O831lgaonHMXsd-_DpQ3002x3S4"]
    }

    release {
        manifestPlaceholders = [ mapApiKeyValue:"AIzaSyAuMGDLr2HeuRed4JA0CrdYYdZRjeC3EA"]
    }
}
  • 编辑清单文件,如下所示。

我的清单文件的一部分

  <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="${mapApiKeyValue}" />

此解决方案适用于最新的 Android 5.0 和 Android 6.0(API 20、21、22、23)


于 2018 年 5 月 3 日更新 Xamarin 表单和 Xamarin 本机应用程序

在Android Project中打开 AssemblyInfo.cs并添加以下代码

#if DEBUG
   [assembly: MetaData("com.google.android.maps.v2.API_KEY", Value = "DebugKey123123123")]
#else
   [assembly: MetaData("com.google.android.maps.v2.API_KEY", Value = "ReleaseKey123123123")]
#endif

要检查 AndroidManifest 文件,转到obj/Debug/android文件夹并打开清单文件并检查元信息,

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="DebugKey123123123" />
于 2016-09-01T07:49:51.840 回答
16

对于需要维护单独密钥的组织,您可以将它们放在 Android Studio 中的单独目录中。确保src您使用的子目录与风味或buildType

使用 Gradle 构建项目

To build each version of your app, the build system combines source code and resources from:

src/main/ - the main source directory (common to all variants)
src/<buildType>/ - the build type source directory
src/<flavorName>/ - the flavor source directory

projectroot/yourapp/build.gradle

buildTypes {
    debug {
        runProguard false
        debuggable true

    }
    release {
        runProguard true
        debuggable false
        ...
    }

projectroot/yourapp/src/main/AndroidManifest.xml

...
<application
    android:name=".MyApplication"
    android:theme="@style/Theme">
<!-- Don't put your key here -->
...

projectroot/yourapp/src/debug/AndroidManifest.xml中,完全限定应用程序的名称。

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:name="com.hipmunk.android.HipmunkApplication">
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="yourdebugkey" />
    </application>
</manifest>

projectroot/yourapp/src/release/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:name="com.hipmunk.android.HipmunkApplication">
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="release key" />
    </application>
</manifest>
于 2014-08-12T18:00:26.947 回答
8

由于您使用的是 gradle,因此您可以执行以下操作:

构建.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 并根据您的构建类型设置值。希望这可以帮助。

于 2017-06-22T11:46:00.940 回答