Google API调试键和发布键之间的区别

时间:2019-03-16 16:39:49

标签: android google-maps google-api google-maps-android-api-2

我想这个问题已经回答了很多,但是我找不到任何可以理解的答案。

我目前正在开发使用Google Maps API的Android应用。我设法使其工作了一段时间,但我从未真正理解如何正确使用DebugRelease键。

我不知道如何通过Android Studio获取我的应用程序的SHA-1调试和发布证书。

在Playstore控制台上,我可以获得SHA-1发行证书(请参见下图),但是在将应用程序发布到商店之前,我不知道如何获得它。那是一个问题,因为当我需要首次发布我的应用程序时,我没有此证书,因此地图无法工作。我必须发布带有损坏地图的应用,然后通过Play商店控制台检索SHA-1证书。

Release SHA-1 from the playstore

此外,我不知道如何在Android Studio项目中添加调试和发布密钥。在Android视图的res文件夹中,我有一个带有调试标签的google_maps_api.xml(请参见下图)。但是,如何添加一个要发布?是同一把钥匙吗?在这种情况下,为什么在这里有调试标记?

Example of debug file

感谢您给我的提示和解释!

2 个答案:

答案 0 :(得分:1)

基于Google Maps Places SDK for Android Documentation

  

调试证书:进行调试构建时,Android SDK工具会自动生成此证书。只使用这个   您正在测试的应用的证书。不要尝试发布   使用调试证书签名的应用。调试证书   在Signing in Debug Mode中有更详细的描述   在Android开发者文档中。

     

发布证书:执行发布版本时,Android SDK工具会生成此证书。您也可以生成此   使用keytool程序获取证书。当您使用此证书时   准备将您的应用发布给全世界。

现在要获取您的发行证书,请按照以下步骤操作:

  1. 找到发布证书密钥库文件。没有发布密钥库的默认位置或名称。如果在构建要发布的应用程序时未指定任何一个,则该构建将使.apk保持未签名状态,并且必须对其进行签名才能发布。对于发行证书,您还需要证书的别名以及密钥库和证书的密码。您可以通过输入以下内容列出密钥库中所有密钥的别名:

    keytool -list -keystore your_keystore_name
    

your_keystore_name替换为密钥库的标准路径和名称,包括扩展名 .keystore 。系统将提示您输入密钥库的密码。然后 keytool 显示密钥库中的所有别名。

  1. 在终端或命令提示符下输入以下内容:

    keytool -list -v -keystore your_keystore_name -alias your_alias_name
    

your_keystore_name替换为密钥库的标准路径和名称,包括扩展名 .keystore 。将your_alias_name替换为创建证书时为证书分配的别名。

您应该看到类似于以下内容的输出:

Alias name: <alias_name>
Creation date: Feb 02, 2013
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 4cc9b300
Valid from: Mon Feb 02 08:01:04 UTC 2013 until: Mon Feb 02 18:05:04 PST 2033
Certificate fingerprints:
    MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6B:AC:F9
    SHA1: BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:90:AF:A1:66:6E:44:5D:75
    Signature algorithm name: SHA1withRSA
    Version: 3

SHA1开头的行包含证书的SHA-1指纹。指纹是由冒号分隔的20个两位数的十六进制数字的序列。

此证书将是您将包含在API key restriction中的GCP(Google云平台)控制台中的证书。

请注意,可以在上面提到的documentation中找到它。

答案 1 :(得分:0)

抱歉,我的答案格式不正确。请记住,目标不是调试或发布名称,而是通过使用私钥和公钥加密来增加安全性。

安全加密领域有很多格式,因此在这种情况下使用的格式来自OpenSSL和Java。

基本上,您使用包含证书和私钥/公钥的JKS Java密钥库对软件包进行签名。

要生成密钥,请遵循https://source.android.com/devices/tech/ota/sign_builds#certificates-keys

密钥将使用OpenSSL框架生成,私钥的格式为.pk8,公证书的格式为x509.pem。您将获得许多密钥:releasekey,shared,media和platform。名称并不重要。重要的是您为密钥生成的$subject

一旦有了基于android文档的密钥,就必须将其转换为PK12,这是JKS的兼容格式。 openssl pkcs12 -export -in platform.x509.pem -inkey /dev/stdin -name platform-debug -password pass:AStrongP4ssword -out tmp.p12

最后,您可以创建包含PK12格式的JKS。

keytool -genkey -keystore platform-debug.jks

# Import created JKS
keytool -importkeystore -deststorepass 'AStrongP4ssword' -srckeystore tmp.p12 -srcstoretype PKCS12 -srcstorepass 'AStrongP4ssword' -destkeystore release.jks -destkeypass 'AStrongP4ssword'