我正在使用Google Maps API for Android。我将我的代码从我的桌面推送到Github上,然后当我想在旅途中处理代码时,将它从Github下载到我的笔记本电脑上。
就Google Maps API而言,我需要将API密钥放在Android清单中,如下所示:
<application>
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY"/>
</application>
现在,因为我有两个不同的调试证书(笔记本电脑上的那个和桌面上的那个),谷歌的API密钥也会有所不同,因为来自调试证书的SHA-1指纹会有所不同。
如何在两台PC上保持这种独特性?
我认为有必要在git上跟踪android清单,因为这是任何应用程序中非常重要的组件,但现在我每次推送时如何避免API密钥冲突?
答案 0 :(得分:5)
我认为VonC方式可能是最正确的方法,但我也想出了一个快速的解决方法。
您可以在values.xml文件夹下创建一个单独的自定义xml文件,并根据需要调用它。我打电话给我的constants.xml
在xml中,您可以添加api密钥:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_places_geo_api"/>
我将它与strings.xml分开,这样我就不必在git上跟踪这个文件了。我在git上跟踪strings.xml。
在你的清单上:
re
运行并从constants.xml文件中提取api密钥。
答案 1 :(得分:2)
不要跟踪Android清单:在git checkout上自动生成它。
这称为smudge
脚本,是content filter driver的一部分,使用.gitattributes
declaration。
(图片来自&#34; Customizing Git - Git Attributes&#34;,来自&#34; Pro Git book&#34;)
那&#39; smudge
&#39;脚本(你必须写)需要:
答案 2 :(得分:2)
我知道OP已经接受了答案和一个非常聪明的解决方法,但我想有一种更简单的方法。
当您在不同的PC中使用不同的调试证书时,会出现关键问题。如果您有一组开发人员在同一个应用程序上工作,同样的问题也是如此。我们在我工作的地方所做的就是在每台计算机上使用相同的调试密钥。从根本上解决问题。
第一个执行Maps API代码的开发人员传递给了我,另一个开发人员传递了他的debug.keystore,并在PC上替换了这个文件。
对于运行Android Studio的Mac和Linux,此文件位于$HOME/.android/debug.keystore
更换此文件意味着根本不必担心任何API密钥。您甚至可以将此文件签入GIT,以确保它不会丢失。
答案 3 :(得分:1)