我知道Gradle功能强大,我希望管理API密钥以开发/生产GoogleMap
目前,我总是需要手动注解一行并取消注解另一行才能正常工作。有没有办法在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]" />
-->
4条答案
按热度按时间57hvy0tb1#
由于您使用的是gradle,因此可以执行以下操作:
在你的机器人清单. xml中
这样,您只有一个AndroidManifest.xml,并且您可以根据构建类型设置值。
6mw9ycah2#
您可以使用清单占位符功能实现这一点:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support
在build.gradle文件中:
然后在清单中:
对于不同风格的不同键也是如此,这是比使用字符串资源更干净的解决方案。
另一方面,我最好考虑从后端获取API密钥,不要在客户端硬编码它们。这是更安全和更灵活的方法。
1dkrff033#
在Android Studio中(0.8.11版已勾选),您可以将Google Maps Activity(New-〉Google-〉Google Maps Activity)添加到您的项目中,Android Studio将为您生成必要的文件,您只需插入密钥。此外,还会生成一些说明。请在debug/res/values/和release/res/values文件夹中查找google_maps_api.xml文件。
fv2wmkja4#
在Android Studio中,有构建类型和风格的概念,您可以使用这些概念来获取所需内容。构建类型是功能相同但调试代码可能不同的应用的不同版本。默认情况下,所有Android Gradle项目都有调试和发布构建类型。
风味是功能不同的应用版本;例如,您可以选择免费和付费。默认情况下,您的Android Gradle项目没有任何风格,但您可以添加这些风格。
构建类型和风格是在构建时结合在一起的(被称为
variant
);在本例中,您可以拥有freeDebug、freeRelease、paidDebug和paidRelease构建版本。构建系统允许您轻松地覆盖每个类型/风格/变体中的许多内容;你可以做的事情之一是覆盖AndroidManifest.xml文件的一部分。2当构建一个特定的变体时,构建系统会将清单的不同合格位合并到一个主清单中。
有了这些背景知识,您可能希望在应用的调试版本和发布版本中使用不同的API密钥。调试版本是您将在日常开发、调试和测试中使用的版本,而发布版本是您将部署给用户的版本。
为此,**
do not
将Google Maps API密钥放入src/main
中主应用的AndroidManifest.xml文件;相反,添加两个新文件夹src/debug
和src/release
,并在其中添加stub
**AndroidManifest.xml文件。不要在这些新清单中包含完整信息,而只包含特定变体所需的唯一信息。您的源文件将如下所示:您的
src/debug/AndroidManifest.xml
文件将包含以下内容:而
src/release/AndroidManifest.xml
将具有以下内容:重申一下,不要在
src/main/AndroidManifest.xml
文件中放置任何API密钥。如果出于某种原因,你不想使用构建类型来区分,你可以设置开发和生产风格,并以这种方式将其分开;清单重写以相同的方式工作。