【问题标题】:Difference between Google API Debug and Release keysGoogle API Debug 和 Release 键的区别
【发布时间】:2019-03-16 16:39:49
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案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 个两位十六进制数字的序列。

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

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

    【讨论】:

    • 感谢您的解释。我已经知道其中一些。但是,我不明白如何生成发布证书或密钥库文件?此外,我相信我的密钥库文件中的 SHA-1 与 Google PlayStore 中的不同......为什么会这样?最后,在 GCP 中,我是否必须添加调试 SHA-1 才能使用 GMap ?我想我必须这样做。
    • 通过阅读文档,似乎我的密钥库中的 SHA-1 被称为upload key,而 playStore 上的 SHA-1 被称为 app signing key,它是由 Google 自己生成的签署我的应用程序。我对吗 ?这可以解释为什么我在 playstore 上有两个 SHA-1 证书(上传和签名证书)?但在这种情况下,我需要在 GCP 上添加哪一个?
    【解决方案2】:

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

    安全加密领域有多种格式,因此在此上下文中使用的格式来自 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 2012-08-21
      • 2010-10-30
      • 2016-04-11
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多