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中
- 点击创build新的Android密钥...
- 在cmd.exe / Terminal:
keytool -list -v -keystore mystore.keystore
- 密码:
android
- 现在input
SHA1 key;package name
debugging的SHA1 key;package name
,然后按回车 - input
SHA1 key;package name
释放的SHA1 key;package name
- 点击创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来设置值。 希望这可以帮助。