Git:跟踪或取消跟踪Android API密钥?

3

我是使用谷歌地图API来进行Android开发的。当我想要在旅途中编写代码时,我将代码从桌面电脑推送到Github上,然后在笔记本电脑上从Github下载。

对于谷歌地图API,我需要像这样将API密钥放入android清单中:

<application>
  ...
  <meta-data
      android:name="com.google.android.geo.API_KEY"
      android:value="YOUR_API_KEY"/>
</application>

现在,因为我有两个不同的调试证书(一个在笔记本电脑上,一个在台式机上),所以来自谷歌的API密钥也会不同,因为调试证书的SHA-1指纹会有所不同。

如何在两台计算机上都保持唯一性?

我认为有必要在git上跟踪android清单,因为这是任何应用程序的重要组件,但是每次推送时如何避免API密钥冲突呢?


1
我遇到了相同的问题,所以我添加了两个设备的SHA-1,这是最简单的解决方法。 - Chathura Wijesinghe
同意。那是另一个可能的解决方案。 - Simon
4个回答

6

我认为VonC的方式可能是最正确的方法,但我也想到了一个快速解决方法。

您可以在values.xml文件夹下创建一个单独的自定义xml文件,随便取名字。我把我的叫做constants.xml。

在xml文件中,您可以添加您的API密钥:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="google_places_geo_api" type="string">APIKEY</item>
</resources>

我将其与strings.xml分开,这样我就不需要在git上跟踪此文件。但我会在git上跟踪strings.xml。
在您的清单文件中:
<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="@string/google_places_geo_api"/>

运行时,API密钥将从constants.xml文件中获取。


2
不要跟踪Android清单:在Git检出时自动生成它。
这被称为“smudge”脚本,是内容过滤驱动程序的一部分,使用.gitattributes声明enter image description here (图片来自“Customizing Git - Git Attributes”,来源于“Pro Git book”) 需要编写该“smudge”脚本,它需要执行以下操作:
检测其环境,获取正确的密钥(可能来自已跟踪的另一个文件,并列出这些密钥),使用带有占位符值的跟踪清单模板生成清单。

1
谢谢 - 我可能需要做更多的调查,因为这是我第一次听说涂污脚本,但感谢您指引我正确的方向。 - Simon

2

我知道有一篇被接受的答案和一个由原始发帖人提出的非常聪明的解决方法,但我想有一种更简单的方法。

当你在不同的电脑上有不同的调试证书时,关键问题就出现了。如果你有一组开发者共同开发一个应用程序,那么同样的问题也会存在。我们在我的工作地方所做的就是在每台计算机上都使用相同的调试密钥,从根本上消除这个问题。

第一个编写 Maps API 代码的开发人员将他的 debug.keystore 文件传递给我和其他开发人员,然后你只需把这个文件替换到你的电脑上即可。

对于运行 Android Studio 的 Mac 和 Linux,该文件位于 $HOME/.android/debug.keystore

替换这个文件意味着不用再担心任何 API 密钥问题。甚至可以将此文件提交到 GIT 中,以确保不会丢失。


谢谢,我可能稍后会尝试这个。这会对我很有帮助,我不必重新注册API。 - Simon
1
我提供了内容过滤驱动程序作为“本地git”解决方案,但这个可能更加适合。+1 - VonC

1
只需将两个设备的SHA-1与相同的包名添加即可。

Google Maps API for Android - androidcodegeeks.com


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