在Android Studio中使用Gradlepipe理Google Maps API密钥

我知道Gradlefunction强大,我想pipe理Google Maps的开发/生产API密钥

目前,我总是需要手动评论一行,取消注释另一行,使其工作。 有一种方法可以在Gradle中自动执行一些自定义的发行版configuration吗?

<!-- 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,你可以根据你的构buildtypes来设置值。 希望这可以帮助。

您可以通过清单占位符function来实现: 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}"/> 

对于不同风格的不同密钥,这是确切的事情,这是比使用string资源更清洁的解决scheme。

在Android Studio中(使用版本0.8.11进行检查),您可以将Google地图活动(New-> Google-> Google Maps Activity)添加到您的项目中,Android Studio将为您生成必要的文件,只需插入您的密钥即可。 还有指示生成。 在debug / res / values /和release / res / values文件夹中查找google_maps_api.xml文件。

在Android Studio中,有构buildtypes和风味的概念,您可以使用这些来获得您所需要的内容。 构buildtypes是应用程序的不同版本,function相同,但debugging代码可能不同。 默认情况下,所有Android Gradle项目都具有debugging版本和发布版本types。

风味是你的应用程序的function不同的版本; 例如,您可以免费和付费。 默认情况下你的Android Gradle项目没有任何风格,但你可以添加它们。

构buildtypes和风味在构build时被组合(称为变体 ); 在这个例子中,你可以有freeDebug,freeRelease,paidDebug和paidRelease构build。

构build系统可以轻松地覆盖每种types/风味/变体中的许多事物; 你可以做的一件事就是覆盖AndroidManifest.xml文件的一部分。 构build系统在构build特定变体时将不同的符合条件的清单合并到一个主清单中。

有了这个背景,在你的情况下,你可能想要在你的应用的debugging版本与发行版本中有一个不同的API密钥。 debugging版本是您在日常开发,debugging和testing中使用的版本,发行版本是您要部署给用户的版本。

为此, 请勿将Google Maps API密钥放在src/main的主应用的AndroidManifest.xml文件中; 相反,添加两个新的文件夹, src/debugsrc/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密钥。

如果由于某种原因,你不想使用构buildtypes来区分,你可以设置dev和prod的味道,并拆分它,而不是; 清单覆盖以相同的方式工作。