如何使用上传密钥为您的应用签名
Posted
技术标签:
【中文标题】如何使用上传密钥为您的应用签名【英文标题】:How to sign your app using the upload key 【发布时间】:2017-05-23 03:32:59 【问题描述】:我正在尝试将我的应用发布到 Google Playstore,但我不知道如何使用上传密钥对应用进行签名,如 https://developer.android.com/studio/publish/app-signing.html 中所述
我使用 Android Studio,我使用 Build -> 生成签名的 APK 对 apk 进行了签名,并在我自己的密钥存储路径/文件中创建了我自己的密钥。现在,要发布,我需要使用谷歌上传密钥,这让我很困惑。所以,
在 Google Play 管理中心哪里可以找到我的上传密钥?在这个应用程序的应用签名下,我可以看到 MD5、SHA-1、SHA-256 的上传证书,甚至可以下载一个 upload.pem 文件。我该怎么办?
那么究竟如何使用 Build -> 在 Android Studio 中生成签名的 APK 来使用这个所谓的上传密钥对其进行签名?
我的应用使用谷歌登录来验证用户身份。现在,如果我只安装自己的 apk,它就可以工作。但是如果我从谷歌商店下载它,它不能进行谷歌身份验证,我认为我搞砸了发布程序。
仅供参考,我正在使用“使用 Google Play 应用签名”流程。
请帮忙。
【问题讨论】:
您要遵循哪个流程?有两种可用的方法:- 1. 自行管理密钥和 Keystore 或 2. 使用谷歌应用签名。(稍后即使您丢失它也支持检索密钥)。 使用谷歌应用签名流程 您找到解决问题的方法了吗?我也面临同样的问题。 【参考方案1】:我想我已经想通了……
当您选择使用 Google 应用签名流程时,Google Play 会将您上传的应用的签名更改为应用签名证书的 SHA-1 证书指纹(相对于上传证书)。有关流程,请参见this Studio document 的图 1。
[顺便说一句,您可以在 Google Play 控制台 -> 发布管理 -> 应用签名中找到这两个应用的证书]
这意味着,要使 Oauth 正常工作,您必须创建一个新的 OAuth 2.0 凭据(位于 console.developers.google.com),该凭据使用应用签名证书的指纹(相对于上传证书的指纹)具有相同的包名称。
您的软件包现在将有 2 个 Oauth 凭据,一个用于生产版本,另一个用于您的开发/测试。两者都将具有相同的包名称;生产凭证将使用应用签名指纹,而开发/测试凭证将使用上传(或本地密钥库)指纹。
显然,在您的应用首次部署到 Google Play(GP 分配它)之前,您不会知道应用签名指纹。因此,需要在首次上传到 Google Play 之后,但在点击“推出到生产”之前创建生产凭据。
【讨论】:
我已经在 google play 上传了我的 apk 产品。如何检查提供给 Google 的指纹与用于签署 Android 应用程序的密钥的指纹是否匹配。【参考方案2】:在新系统中,上传密钥是一个简单而普通的密钥库,您可以使用 android studio 创建。 因此,只需签署您的 apk,然后将其发送到 playstore。
Google 将删除此密钥,并使用声明(并在 google play 中生成)的应用程序密钥
【讨论】:
你救了我的命。谢谢【参考方案3】:你想遵循哪个流程,有两种方法:-
-
自行管理密钥和密钥库或
使用 google 应用签名。(稍后即使您丢失它也支持检索密钥)。
让我们来谈谈第一个使用时间最多且简单的方法。 步骤:-
-
创建 Keystore 文件并将密码、别名和别名密码保存在某个安全的地方。
将该密钥库文件保存在您使用上述凭据保存文件的同一位置。
现在转到 build->Generate Signed APK-> 选择您刚刚创建的密钥库文件,提供所有必需的凭据,例如:- 密码、别名、别名密码。
Android Studio 为您生成签名 APK,您可以将其上传到 Playstore。
当您下次再次生成 APK 时,您只需执行第 3 步和第 4 步,因为您的密钥库文件将与您之前使用的相同,因为您正在推送应用程序更新。当您想要更新应用时,APK 应该使用相同的密钥库进行签名,或者您可以使用相同的 SHA 证书。
如果您想通过cammand完成整个过程,那么您可以在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
如果您想使用第二种方法使用谷歌应用程序签名的详细信息可用here 如果您在任何步骤遇到任何问题,请提及该步骤,以便我解决问题。
要首先生成上传密钥,您需要这样做:-
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 lib 自动化来自 here 的整个过程。
或者您可以参考here了解更多详情。
【讨论】:
我使用的是第二种方法,这就是我卡住的地方(尝试纠正我之前犯的错误): -- 在步骤 1,子步骤 1 “创建上传密钥对于新应用程序”,我点击链接到“签署您的应用程序” - 然后在“管理您的密钥”部分的“使用 Google Play 应用程序签名”小节中,它说我应该“然后你创建一个单独的上传钥匙”。我怎么做?然后我如何“向 Google 注册”?【参考方案4】:生成可上传到 Playstore 的签名 apk 的步骤
1) 首先进入 build variant 并选择 Release ,默认选择 debug 。
2) 然后进入生成 Build 菜单并选择 Generate signed apk .here 您将找到选择现有密钥库或创建新密钥库的选项
3) 填写所需的详细信息,例如密钥库文件的路径、密钥库密码、密钥别名和密码
4) 然后您将获得要在 Playstore 上发布的 android 应用的 build-release apk
现在转到谷歌开发者控制台并在管理发布菜单中选择选项以创建发布并上传 apk
【讨论】:
这就是我所做的,但是我的应用程序中的 google 身份验证服务不再起作用(不允许用户通过 google 身份验证,即使我直接安装我构建的 apk 也可以) 可能keyhash有问题,需要指定生成的key hash,希望对您有帮助【参考方案5】:如果 google 为您的应用程序签名,则您必须使用 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
它应该给你你的哈希
【讨论】:
那我们如何处理哈希? 非常感谢。我花了几个小时试图弄清楚如何从这个 Sha1 指纹中获取用于 FB 的哈希键。以上是关于如何使用上传密钥为您的应用签名的主要内容,如果未能解决你的问题,请参考以下文章
您的 Android App Bundle 使用错误的密钥进行签名。 (首次在 google play store 上传应用时)
第一次尝试将应用上传到 Google Play 时出现错误“您的 Android App Bundle 使用错误的密钥签名。”
加固后,上传play store, 在 google play store 下载应用安装后,打开签名校验失败