草庐IT

android - 如何启用 Google Play 应用签名

coder 2023-05-07 原文

我认为很多开发人员都在尝试更多地了解在 Google I/O 2017 上展示的新 Google Play App Signing 功能。

存储 keystore 以对 Google Play 内的应用程序进行签名的功能可以让您无需安全地存储 keystore ,并且可以帮助系统根据硬件和操作系统特性优化提供给每个设备的 APK。

您可以在此处的官方文档中阅读有关此主题的更多信息:https://developer.android.com/studio/publish/app-signing.html#google-play-app-signing .

通过以下答案,我将更好地解释您上传原始 keystore 所需遵循的步骤以及如何创建新的上传 keystore ,从现在开始您需要对您的 APK 进行签名。

最佳答案

在继续观看此 Android 开发者视频以了解您的应用签名注册选择的含义之前:
https://youtu.be/odv_1fxt9BI

本指南面向已在 Play 商店中拥有应用程序的开发人员。如果您开始使用新应用程序,过程会容易得多,您可以遵循 here 中的“新应用程序”段落的指导方针。
99% 的开发者已经具备的先决条件 :

  • Android Studio
  • JDK 8 安装后,您需要在用户空间中设置一个环境变量以简化终端命令。在 Windows x64 中,您需要添加:C:\Program Files\Java\{JDK_VERSION}\binPath环境变量。 (如果你不知道怎么做,你可以阅读我的指南 add a folder to the Windows 10 Path environment variable)。

  • 步骤 0 : 打开 Google Play 开发者控制台,然后转到 Release Management -> App Signing。

    接受应用签名 TOS。

    步骤 1 : 点击与下图相同的按钮下载 PEPK 工具

    步骤 2 :打开终端并输入:

    java -jar PATH_TO_PEPK --keystore=PATH_TO_KEYSTORE --alias=ALIAS_YOU_USE_TO_SIGN_APK --output=PATH_TO_OUTPUT_FILE --encryptionkey=GOOGLE_ENCRYPTION_KEY


    传说:
  • PATH_TO_PEPK = 您在 中下载的 pepk.jar 的路径|步骤 1 , 可能类似于 C:\Users\YourName\Downloads\pepk.jar对于 Windows 用户。
  • PATH_TO_KEYSTORE = 用于签署发行版 APK 的 keystore 路径。可以是 *.keystore 或 *.jks 类型的文件或没有扩展名。类似 C:\Android\mykeystoreC:\Android\mykeystore.keystore等等...
  • ALIAS_YOU_USE_TO_SIGN_APK = 用于签署发行版 APK 的别名的名称。
  • PATH_TO_OUTPUT_FILE = 扩展名为 .pem 的输出文件的路径,类似于 C:\Android\private_key.pem
  • GOOGLE_ENCRYPTION_KEY = 此加密 key 应始终相同。您可以在 App Signing 页面中找到它,复制并粘贴它。应该是这种形式:eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a

  • 示例:

    java -jar "C:\Users\YourName\Downloads\pepk.jar" --keystore="C:\Android\mykeystore" --alias=myalias --output="C:\Android\private_key.pem" --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a


    按 Enter 键,您需要按顺序提供:
  • keystore 密码
  • 别名密码

  • 如果一切顺利,您现在将在 PATH_TO_OUTPUT_FILE 文件夹中拥有一个名为 private_key.pem 的文件。 .
    步骤 3 :点击与下图相同的按钮上传private_key.pem文件

    第 4 步 :使用 Android Studio 创建一个新的 keystore 文件。

    YOU WILL NEED THIS KEYSTORE IN THE FUTURE TO SIGN THE NEXT RELEASES OF YOUR APP, DON'T FORGET THE PASSWORDS


    打开您的 Android 项目之一(随机选择一个)。转到 Build -> Generate Signed APK 并按 Create new。

    现在您应该填写必填字段。

    Key store path represent the new keystore you will create, choose a folder and a name using the 3 dots icon on the right, i choosed C:\Android\upload_key.jks (.jks extension will be added automatically)


    NOTE: I used upload as the new alias name but if you previously used the same keystore with different aliases to sign different apps, you should choose the same aliases name you had previously in the original keystore.



    完成后按 OK,现在您将拥有一个新的 upload_key.jks keystore 。您现在可以关闭 Android Studio。
    步骤 5 : 我们需要从新创建的upload_key.jks中提取上传证书 keystore 。
    打开终端并输入:

    keytool -export -rfc -keystore UPLOAD_KEYSTORE_PATH -alias UPLOAD_KEYSTORE_ALIAS -file PATH_TO_OUTPUT_FILE


    传说:
  • UPLOAD_KEYSTORE_PATH = 您刚刚创建的上传 keystore 的路径。在这种情况下是 C:\Android\upload_key.jks .
  • UPLOAD_KEYSTORE_ALIAS = 与上传 keystore 关联的新别名。在这种情况下是 upload .
  • PATH_TO_OUTPUT_FILE = 带有 .pem 扩展名的输出文件的路径。类似 C:\Android\upload_key_public_certificate.pem .

  • 示例:

    keytool -export -rfc -keystore "C:\Android\upload_key.jks" -alias upload -file "C:\Android\upload_key_public_certificate.pem"


    按 Enter 键,您将需要提供 keystore 密码。
    现在,如果一切顺利,您将在文件夹 PATH_TO_OUTPUT_FILE 中拥有一个名为 upload_key_public_certificate.pem 的文件。 .
    步骤 6 : 上传 upload_key_public_certificate.pem文件单击与下图相同的按钮

    步骤 7 :点击 App Signing 页面末尾的 ENROLL 按钮。

    现在每个新发布的 APK 都必须用 upload_key.jks 签名。在 中创建的 keystore 和别名第 4 步 ,在上传到 Google Play 开发者控制台之前。
    更多资源:
  • Google documentation on Google Play App Signing
  • Form to request the reset of your upload keystore if you lose it

  • 问答
    问:当我上传使用新的 upload_key keystore 签名的 APK 时,Google Play 显示如下错误:您上传了一个未签名的 APK。您需要创建一个签名的 APK。
    答:在构建发布版 APK 时,选中以使用两个签名(V1 和 V2)对 APK 进行签名。阅读 here了解更多详情。
    更新
    第 4、5、6 步是创建上传 key ,该 key 对于现有应用程序是可选的
    “上传 key (现有应用可选):您在注册计划期间生成的新 key 。在将它们上传到 Play 管理中心之前,您将使用上传 key 对所有 future 的 APK 进行签名。”
    https://support.google.com/googleplay/android-developer/answer/7384423

    关于android - 如何启用 Google Play 应用签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44103024/

    有关android - 如何启用 Google Play 应用签名的更多相关文章

    1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

      我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

    2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

      总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

    3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

      关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

    4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

      给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

    5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

      我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

    6. ruby - 将差异补丁应用于字符串/文件 - 2

      对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

    7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

      我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

    8. ruby - 如何指定 Rack 处理程序 - 2

      Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

    9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

      在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

    10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

      我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

    随机推荐