Hrk*_*Hrk 49 android key gradle google-maps-android-api-2 android-studio
我知道Gradle很强大,我想管理用于开发/生产Google Maps的API密钥
目前我总是需要手动注释一行并取消注释另一行以使其工作.有没有办法在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]" />
-->
Run Code Online (Sandbox Code Playgroud)
bon*_*ond 107
由于您使用的是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]"
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的AndroidManifest.xml中
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_api_key"/>
Run Code Online (Sandbox Code Playgroud)
这样,您只有一个AndroidManifest.xml,并根据您的构建类型设置值.希望这可以帮助.
Ily*_*min 24
您可以使用清单占位符功能实现此目的: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"]
}
}
Run Code Online (Sandbox Code Playgroud)
然后在清单中:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="${google_map_key}"/>
Run Code Online (Sandbox Code Playgroud)
对于不同风格的不同键,这是确切的事情,这比使用字符串资源更清晰.
Oka*_*kas 13
在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文件.
Sco*_*rta 11
在Android Studio中,有构建类型和风格的概念,您可以使用它们来获得所需的内容.构建类型是应用程序的不同版本,功能相同但在调试代码中可能不同.默认情况下,所有Android Gradle项目都具有调试和发布版本类型.
Flavors是您的应用程序的功能不同的版本; 例如,你可以免费和付费.默认情况下,您的Android Gradle项目没有任何风格,但您可以添加它们.
当你进行构建时,构建类型和风格被组合(称为变体); 在此示例中,您可以拥有freeDebug,freeRelease,paidDebug和paidRelease构建.
构建系统允许您轻松覆盖每种类型/ flavor/variant中的许多内容; 您可以做的一件事是覆盖AndroidManifest.xml文件的一部分.构建系统在构建特定变体时将不同符合条件的清单合并到一个主清单中.
有了这样的背景,在您的情况下,您可能希望在应用程序的调试版本与发行版本中使用不同的API密钥.调试版本是您在日常开发,调试和测试中使用的版本,发布版本是您部署到用户的版本.
为此,请不要将Google Maps API密钥放在主应用的AndroidManifest.xml文件中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>
Run Code Online (Sandbox Code Playgroud)
并且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>
Run Code Online (Sandbox Code Playgroud)
重申一下,不要在src/main/AndroidManifest.xml文件中放置任何API密钥.
如果由于某种原因你不想使用构建类型来区分你可以设置dev和prod风格并将其拆分成这样; 清单覆盖以相同的方式工作.
| 归档时间: |
|
| 查看次数: |
29325 次 |
| 最近记录: |