Android:自动selectdebugging/发布Maps v2 api key?

我在我的项目中使用Google Maps v2 API。 在Google Maps v2中,debugging/发布API密钥在AndroidManifest.xml定义。 我已经看到了这个链接,但是在这个map中,键是在一个xml布局文件中定义的,而不是在AndroidManifest.xml 。 那么我可以在AndroidManifest.xml为我的项目定义debugging和释放键吗?

我想在AndroidManifest.xml这样的东西:

如果debugging模式:

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

如果发布模式:

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

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

在Google Developer API Console中

  1. 点击创build新的Android密钥...
  2. 在cmd.exe / Terminal: keytool -list -v -keystore mystore.keystore
  3. 密码: android
  4. 现在inputSHA1 key;package namedebugging的SHA1 key;package name ,然后按回车
  5. inputSHA1 key;package name释放的SHA1 key;package name
  6. 点击创build

现在使用这个API键你的项目

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

在最新的Android 5.0和Android 6.0(API 20,21,22,23)中使用build.gradle文件的最佳方式之一,

那么你可以使用它们,而不需要在gradle创build产品口味。 这是我们可以通过Gradle实现的另一个例子。 你可以用两个简单的步骤来实现它。

  • 将自定义值添加到manifestplaceholders build.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}" /> 

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

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

从使用Gradle构build项目 :

 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> 

由于您正在使用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,你可以根据你的构buildtypes来设置值。 希望这可以帮助。