Android Google Maps v2 - 调试密钥 vs 发布密钥

16

我清楚如何获取用于Google Maps v2库的调试密钥,以及如何获取发布密钥。目前我的清单文件中相关部分如下:

<!-- Debug -->
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="[my debug key here]"/>

<!-- Release        
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="[my release key here]"/>
-->

相关的键已取消注释,另一个已被注释。

有没有人能指出一种方便的方法来避免每次需要调试而不是发布版本时都要注释/取消注释这些清单文件的片段的麻烦?


新的基于Gradle的构建系统应该有助于这个领域。您应该能够定义调试与生产字符串资源,并将API密钥保存在其中之一。 - CommonsWare
请问,您能提供一下在发布模式下实现谷歌地图的步骤吗?我尝试了很多方法,但是我无法解决这个问题。 - guisantogui
Michal 给出了答案:可以为同一密钥指定多个指纹和包名。我认为 Google 的文档非常准确:https://developers.google.com/maps/documentation/android-api/signup - Giorgio Barchiesi
3个回答

37

在版本2 API中,您可以将相同的密钥用于发布和调试。在您的Google API控制台中编辑允许的Android应用程序,并在每一行上放置您的调试/发布密钥,然后输入您的应用程序名称。您可以使用多行,这样它就可以与两个密钥一起使用。


1
太好了!事实上,我在API控制台中没有注意到这个小指示: 每行一个SHA1证书指纹和包名(用分号分隔)。 谢谢Michal。 - Giorgio Barchiesi
每个发布类型使用不同的 API 密钥仍然是推荐的,对吧?我认为这与安全有关,而不是方便。 - diego nunes
如果这是情况的话,那么存在哪些安全风险?我试图想出一些场景,但只能想到如果API密钥被调试APK滥用,从而影响生产应用程序...但不知道这怎么可能发生。 - androidguy

5
build.gradle文件中可以定义用于调试版本和发布版本的不同的Google Map API密钥:
...
android {
    ...
    buildTypes {
       debug {
           resValue "string", "google_maps_api_key", "<debug_key>"
           ...
       }
       release {
           resValue "string", "google_maps_api_key", "<release_key>"
           ...
       }
    }
}

只需将<debug_key><release_key>替换为您实际的密钥。

并在AndroidManifest.xml中引用此资源值:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/google_maps_api_key"/>

此解决方案也在以下Stack Overflow问题中描述:

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


清单值不能保存在字符串资源中,如果您需要将应用本地化到多种语言。 Android Studio 不允许生成发布版本。 - Valeriya

3

或者,您可以将调试密钥放置在app/src/debug/res/values/google_maps_api.xml中,其内容类似于以下内容:

<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx</string>

同样的方式,把发布密钥放在app/src/release/res/values/google_maps_api.xml中。

这样你就有了两个密钥和相同的源代码。对于开源项目非常方便,你可以发布你的源代码但不公开API密钥。你只需要忽略/不上传google_maps_api.xml文件,就可以愉快地继续进行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接