如何使用上传密钥对应用进行签名

23

我正在尝试将我的应用程序发布到Google Play商店,但我无法弄清如何使用上传密钥签署应用程序,就像https://developer.android.com/studio/publish/app-signing.html中所述。

我使用Android Studio,使用“Build -> 生成已签名的APK”签署了apk,并在自己的密钥库路径/文件中创建了自己的密钥。现在,为进行发布,我需要使用谷歌上传密钥,这让我感到困惑。所以:

  1. 我在Google Play控制台上哪里可以找到我的上传密钥?在此应用程序的App签署下,我可以看到MD5、SHA-1、SHA-256的上传证书,甚至可以下载一个upload.pem文件。我该怎么做?

  2. 然后,我应该如何使用Android Studio中的“Build ->生成已签名的APK”来用所谓的上传密钥签署它?

我的应用程序使用谷歌登录来验证用户。目前,如果我只安装自己的apk,它可以正常工作。但是,如果我从Google商店下载它,它无法进行谷歌身份验证,因此我认为我搞砸了发布过程。

供您参考,我正在使用“使用Google Play应用签署”流程。

请帮忙。


你想采取哪种流程?有两种可选方式:
  1. 自行管理密钥和密钥库,
  2. 使用谷歌应用签名(即使密钥丢失,后续仍可提供密钥恢复的支持)。
- VikasGoyal
使用Google应用签名流程 - Michael
你解决了这个问题吗?我也遇到了同样的问题。 - RudyF
5个回答

8
我想我已经理解了这个问题...
当您选择使用Google应用签名过程时,Google Play会将上传的应用程序签名更改为应用程序签名证书的SHA-1证书指纹(而不是上传证书)。有关流程,请参见此工作室文档中的图1。
[顺便说一下,您可以在Google Play控制台 ->发布管理 ->应用签名中找到两个应用程序证书]
这意味着,为了使Oauth正常工作,您必须使用相同的包名称创建一个新的OAuth 2.0凭据(在console.developers.google.com上),使用应用签名证书的指纹(而不是上传证书的指纹)。
现在,您的包将具有2个Oauth凭据,一个用于生产发布,另一个用于开发/测试。两者将具有相同的包名称;生产凭据将使用应用签名指纹,而开发/测试凭据将使用上传(或本地密钥库)指纹。
显然,直到您的应用首次部署到Google Play(GP分配它)之前,您将不知道应用签名指纹。因此,在第一次上传到Google Play后但在点击“发布到生产”之前,需要创建生产凭据。

我已经将我的apk生产版上传到Google Play。如何检查提供给Google的指纹是否与用于签名Android应用程序的密钥的指纹匹配? - Lahari Areti

5

有了新系统,上传密钥就是一个普通的keystore,您可以在Android Studio中创建它。

所以,只需签署您的apk并将其发送到Play商店即可。

谷歌将删除此密钥,并使用在Google Play中声明(并生成)的应用程序密钥。


你救了我的命。谢谢。 - Tareq

1

你想要遵循哪个流程,有两种可选方式:

  1. 自己管理密钥和密钥库。
  2. 使用 Google 应用签名(稍后提供支持,即使您丢失了密钥也可以找回)。

让我们先谈谈第一种方式,这是最常用且容易的方法。

  1. 创建密钥库文件并将密码、别名和别名密码保存在某个安全的地方。
  2. 将该密钥库文件保存在与上述凭据相同的位置。
  3. 现在进入 "构建"->"生成已签名的 APK"->选择刚刚创建的密钥库文件,提供所有必需的凭据,如:密码、别名、别名密码。
  4. Android Studio 会为您生成已签名的 APK,您可以上传到 Play 商店。
  5. 下次再生成 APK 时,您只需要按照步骤 3 和步骤 4 进行操作,因为您的密钥库文件将与之前使用的相同,因为您正在推送应用程序更新。当您想要更新应用程序时,APK 应该使用相同的密钥库或相同的 SHA 证书进行签名。
如果您想通过命令完成整个过程,那么您可以在app.gradle文件中添加buildType配置,这是更好和更合适的方法。
要添加buildType配置,请参见gradle代码:-
android{
buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            storeFile file("path for release.keystore")
            storePassword keystore_password
            keyAlias keystore_alias
            keyPassword keystore_alias_password
        }
    }
} 

在上述配置中,您需要在storeFile标签中提供发布密钥库文件的文件路径,并且还需要按照要求在storePassword、keyAlias和keyPassword中提供凭据。
添加完上述配置后,您现在可以通过简单的gradlew命令生成已签名的apk:- ./gradlew clean assembleRelease 如果您想采用第二种方法使用Google应用程序密钥进行签名,请点击这里查看详细信息。如果您在任何步骤遇到问题,请提及该步骤,以便我解决问题。
要生成上传密钥,首先需要执行以下操作:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

然后使用以下方式对apk进行签名:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keys

您也可以使用Github库来自动化整个过程,从这里开始。

或者您可以参考这里获取更多详细信息。


2
我正在使用第二种方法,这就是我卡住的地方(试图纠正之前犯的错误):
  • 在步骤1、子步骤1“为新应用程序创建上传密钥”中,我按照链接“签署您的应用程序”的说明进行操作。
  • 然后,在“管理密钥”部分的“使用Google Play应用签名”子部分中,它说我应该“然后创建一个单独的上传密钥”。我该怎么做?然后我如何“向Google注册它”?
- Michael

-1

生成可上传到Play商店的已签名APK文件的步骤

1) 首先进入构建变体并选择发布版, 默认情况下会选择调试版。

2) 然后进入生成构建菜单并选择生成已签名APK文件。在这里,您将找到选择现有密钥库或创建新密钥库的选项。

3) 填写所需的详细信息,例如密钥库文件路径、密钥库密码、密钥别名和密码。

4) 然后您将获得要发布到Play商店的Android应用程序的已发布版本APK文件。

现在进入Google开发者控制台,在“管理发布”菜单中选择创建发布选项并上传APK文件。


这就是我所做的,但是我的应用程序中的谷歌身份验证服务不再工作(即使我只是直接安装我构建的apk,它也无法允许用户通过谷歌进行身份验证)。 - Michael
可能存在密钥散列问题,您需要指定生成的密钥散列。希望这能有所帮助。 - Swanand Keskar

-2

如果谷歌正在为您签名应用程序,则必须使用来自Google Play商店的SHA。 在您的Google Play控制台中,进入“发布管理”和“应用签名”。

从“应用签名证书”部分,获取SHA-1证书指纹值(不要获取SHA1:部分):

11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:AA:BB:CC:DD:EE

并在此命令中使用它

echo "11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:AA:BB:CC:DD:EE" | xxd -r -p | openssl base64

它应该给你你的哈希值


12
那么我们该如何处理这个哈希值? - Stephen
非常感谢您。我花了几个小时才弄清楚如何从这个Sha1指纹获取哈希密钥以供FB使用。 - Paul Rivera

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