在Android Studio中,有构建类型和风味的概念,您可以使用它们来获取所需内容。构建类型是应用程序的不同版本,功能相同,但调试代码可能不同。默认情况下,所有Android Gradle项目都具有调试版本和发布版本类型。
风味是您的应用程序的功能不同的版本;例如,您可以免费和付费。默认情况下你的Android Gradle项目没有任何风格,但你可以添加它们。
当您进行构建时,构建类型和风味被合并(称为变体);在这个例子中,你可以有freeDebug,freeRelease,paidDebug和paidRelease构建。
构建系统可让您轻松覆盖每种类型/风味/变体中的许多事物;你可以做的一件事就是覆盖AndroidManifest.xml文件的一部分。构建系统在构建特定变体时将不同合格的清单合并到一个主清单中。
有了这种背景,对于您的情况,您可能希望在应用的调试版本与发行版本中拥有不同的API密钥。调试版本是您在日常开发,调试和测试中使用的版本,发布版本是您要部署给用户的版本。
要做到这一点,不放在主应用程序的AndroidManifest.xml文件中的谷歌地图API密钥src/main
;相反,添加两个新文件夹,src/debug
和src/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>
再次重申,不将任何API密钥放入src/main/AndroidManifest.xml
文件中。
如果由于某种原因,您不想使用构建类型来区分,您可以设置dev和prod口味并将其拆分;清单覆盖以相同的方式工作。
老兄正是我需要的,很好的问题。 – Radu 2015-04-29 13:48:46