前言

Android要求所有的应用必须进行数字签名才可以发布,也就是我们平时所说的使用证书打包然后上传市场。这个签署的过程又包括创建和存储证书,使用不同证书签署不同的构建配置,及自动签署过程。


重要的角色:证书和密钥库
公钥证书又称为数字证书和身份证书包含公钥/私钥对的公钥,以及可以标识密钥所有者的一些其他元素,例如名称和位置,证书持有者持有对应的私钥


在签署工具签署我们的APP时,会自动将我们的公钥证书附加到APK中,并且关联到该证书的持有者及持有者拥有的对应私钥,这样就保证了应用的每次更新都来自原创者。
用于创创建此公钥证书的密钥称为应用签名密钥,也就是我们所说的密钥。


签署调试构建(即我们平时所说的Debug)

从IDE中运行或调试我们的项目时,Android Studio将自动使用通过Android SDK工具生成的调试证书签署我们的APK,当我们在 Android Studio 中首次运行或调试项目时,IDE 将自动在 $HOME/.android/debug.keystore(~/.android/(OS X 和 Linux)
C:\Documents and Settings\.android\(Windows XP)
C:\Users\.android\ (Windows Vista,Windows 7、8 和 10)) 中创建调试密钥库和证书,并设置密钥库和密钥密码。
Android Studio会自动将我们的调试签署信息存储到签署配置中,因此我们不必每次调试时都输入相关信息。签署配置是一种包含签署APK所需全部必要信息的对象,这些信息包括密钥库位置、密钥库密码、密钥名称和密钥密码
运行手后生成的APK目录:项目位置-app-build-outputs-apk下


调试证书的有效期

Google将调试签署 APK 的自签署证书的有效期设置为365天,从构建该yingyong之日起,一旦到期,将会收到一个构建错误,要想修复次问题,必须删除上面所说的第一次构建时产生的debug.keystore文件,当您下次构建和运行调试构建类型时,这些构建工具将重新生成新的密钥库和调试密钥。请注意,您必须运行应用,单纯的构建不会重新生成密钥库和调试密钥。


创建密钥和密钥库

Android Studio 生成应用签名或上传密钥,步骤如下:

  • 1.在菜单栏中 点击Build->Generate Signed APK
  • 2.点击create new创建一个新的密钥和密钥库
  • 3.在new key store窗口上,为密钥和密钥库配置以下信息

  • Key store path:创建密钥库的位置

  • Password:为密钥库创建一个安全的密码
  • 密钥: Alias:为密钥输入一个标识名
  • Password:为密钥创建一个并确认安全的密码(此密码应当与密钥库的密码不同)
  • Validity (years):以年为单位设置密钥的有效时长。密钥的有效期应至少为 25
    年,以便您可以在应用的整个生命期内使用相同的密钥签署应用更新。
  • Certificate:为证书输入一些关于您自己的信息。此信息不会显示在应用中,但会作为 APK 的一部分包含在您的证书中

    然后点击OK,这样我们的密钥库和密钥就生成了,然后就可以用来签署我们的APK了


签署APK

使用Android Studio可以一次签署单个或多个APK,当然我们也可以将Gradle构建设置配置为在构建流程期间自动处理签署。

  • 1.点击 Build > Generate Signed APK 以打开 Generate Signed APK 窗口。(如果您刚刚按上述说明生成了一个密钥和密钥库,则此窗口已处于打开状态。)
  • 2.在 Generate Signed APK Wizard 窗口上,选择一个密钥库和一个私钥,并为它们输入密码。(如果您刚刚在上一部分中创建密钥库,这些字段将自动填充。)然后,点击 Next
  • 3.在下一个窗口上,为签署的 APK 选择一个目的地、选择构建类型、选择产品风味(如果适用,即我们平时所说的发布平台),然后点击 Finish 注:Android Studio 将为选择的每个产品风味生成单独的 APK。


配置构建流程自动签署APK

在Android Studio中我们可以创建一个签署配置并分配至发布构建类型,这样就可以将我们的项目配置为在构建流程中自动签署并发布APK。一个签署配置包括一个密钥库(jks文件)的位置,密钥库的密码(Key Store password),密钥别名(Key alias),密钥密码(key password),要使用Android Studio创建一个签署配置并分配至发布构建类型,须按以下步骤:

  • 1.在 Project 窗口中,右键点击您的应用并点击 Open Module Settings。
  • 2.在 Project Structure 窗口左面板中的 Modules 下,点击您想要签署的模块。
  • 3.点击 Signing 标签,然后点击 Add。
  • 4.选择您的密钥库文件,为此签署配置输入一个名称(因为您可能创建多个配置),然后输入所需的信息。
  • 5.点击 Build Types 标签。
  • 6.点击 release 构建。
  • 7.在 Signing Config 下,选择您刚创建的签署配置

    在您创建签署配置时,您的签署信息将以纯文本形式包含到 Gradle 构建文件中。如果您是团队协作开发或者公开分享自己的代码,那么您应当从构建文件中移除签署信息并将其单独存储,从而确保此信息的安全。

签署不同市场

如果我们的应用在发布在不同的市场并且以各自的方式签署发布,那我们可以创建更多的签署配置并分配给对应的市场:

在 Project 窗口中,右键点击您的应用并点击 Open Module Settings。

  • 1.在 Project Structure 窗口左面板中的 Modules 下,点击您想要签署的模块。
  • 2.点击 Signing 标签,然后点击 Add
  • 3.选择您的密钥库文件,为此签署配置输入一个名称(因为您可能创建多个配置),然后输入所需的信息。
  • 4.选择您的密钥库文件,为此签署配置输入一个名称(因为您可能创建多个配置),然后输入所需的信息。
  • 5.如果需要,请重复第 3 步和第 4 步,直到您完成所有签署配置的创建。
  • 6.点击 Flavors 标签。
  • 7.点击您想要配置的风味,然后从 Signing Config 下拉菜单中选择合适的签署配置。
    比如:我们使用之前配置的config签署小米市场

签署注意事项

为什么在软件的生命周期内要使用相同的证书签署应用呢?原因如下:

  • 应用升级:当系统安装应用的更新时,它会比较新版本和现有版本中的证书。如果证书匹配,则系统允许更新。如果您使用不同的证书签署新版本,则必须为应用分配另一个软件包名称 在此情况下,用户将新版本作为全新应用安装。
  • 应用模块化:Android 允许通过相同证书签署的多个 APK
    在同一个进程中运行(如果应用请求这样),以便系统将它们视为单个应用。通过此方式,您可以在模块中部署您的应用,且用户可以独立更新每个模块。
  • 通过权限共享代码/数据:Android
    提供基于签名的权限执行,以便应用可以将功能展示给使用指定证书签署的另一应用。通过使用同一个证书签署多个 APK
    并使用基于签名的权限检查功能,您的应用可采用安全的方式共享代码和数据。

从配置文件中移除签署信息

在我们创建签署信息时,Android Studio会以纯文本的形式将签署信息添加到模块的build.gradle文件中,如果您是团队协作开发或者将您的代码开源,那么您应当将此敏感信息从构建文件中移出,以免被其他人轻易获取。为此,您应创建一个单独的属性文件来存储安全信息并按以下步骤操作,在您的构建文件中引用该文件:

  • 1.创建一个签署配置,并将其分配至一个或多个构建类型。这些说明假设您已经按照上面配置构建流程以自动签署您的 APK 部分所述,为发布构建类型配置了一个签署配置。
  • 2.在项目的根目录下创建一个名为 keystore.properties 的文件。此文件应当包含您的签署信息,如下所示:
storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation



- 3.在模块的 build.gradle 文件中,于 android {} 块的前面添加用于加载 keystore.properties 文件的代码

// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.
def keystorePropertiesFile = rootProject.file("keystore.properties")

// Initialize a new Properties() object called keystoreProperties.
def keystoreProperties = new Properties()

// Load your keystore.properties file into the keystoreProperties object.
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))android {...
}


- 4.我们也可以使用语法 keystoreProperties[‘propertyName’] 引用存储在 keystoreProperties 中的属性。修改模块 build.gradle 文件的 signingConfigs
块,以便使用此语法引用存储在 keystoreProperties 中的签署信息

android {signingConfigs {config {keyAlias keystoreProperties['keyAlias']keyPassword keystoreProperties['keyPassword']storeFile file(keystoreProperties['storeFile'])storePassword keystoreProperties['storePassword']}}...}
  • 5.打开 Build Variants 工具窗口并确保已选择发布构建类型。
  • 6.点击 Build > Build APK 以构建您的发布构建,并确认 Android Studio 已在模块的 build/outputs/apk/ 目录中创建一个签署的 APK。
    由于您的构建文件不再包含敏感信息,您现在可以将其包含在源控制中或者上传到共享的代码库。务必保证 keystore.properties
    文件的安全。您可能需要将其从您的源控制系统中移除。

以上就是小白对签署应用做的一些总结,希望对大家有所帮助!后面小白会介绍如何从命令行签署一个应用!

Android签名打包、密钥库、密钥全面解析相关推荐

  1. jarsigner 找不到XXX的证书链。xxx必须引用包含私有密钥和相应的公共密钥证书链的有效密钥库密钥条目

    jarsigner -verbose -keystore name.keystore -signedjar sign.apk unsign.apk  keyAlias 使用jarsigner签名时可能 ...

  2. android签名打包发布到应用市场

    android签名打包发布到应用市场 一 主题 本篇文章详细介绍android从签名打包到发布到应用市场的流程,以及遇到的问题, 二,版本1.0.0 首先说一下你的apk第一个版本的发布, 1,创建签 ...

  3. Flutter Android 签名打包

    文章目录 查看APP包的签名 Flutter 配置Android 签名 创建 keystore 引用应用程序中的keystore gradle中配置签名 构建一个发布版apk(打包) 在设备上安装发行 ...

  4. Android签名打包详解

    一.      Android签名有什么作用? 应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名.这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序.如果你采用 ...

  5. Android签名打包报错:Conversion to Dalvik fromat failed with error 1

    今天测试Quick-Cocos2dx-Community 最新版本,ndk对应版本是ndk-r10e.从编译到ADT中debug调试都没有问题,但是在最终签名打包时报了一个错:Conversion t ...

  6. 获取Android签名打包keystore或者.jks文件的MD5

    Android开发,经常会调用第三方,例如在申请第三方的时候,经常会用到MD5等信息,下面是从一个签名打包的key文件里面去获取这些信息. 打开cmd或终端,找到对应的key签名文件,然后输入keyt ...

  7. Android签名打包很慢,Android APK快速签名—优化打包时间

    一.Android签名机制 Android签名机制可划分为ROM签名机制与第三方APK签名机制,在这里只讨论APK签名机制. Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名 ...

  8. 安智市场apk 签名问题 : 找不到xxx.jks的证书链。meimei.jks必须引用包含私有密钥和相应的公共密钥证书链的有效密钥库密钥条目。

    " 先点击下载签名验证 APK下载我们提供的签名验证 APK, 然后自己动手签名并上传 注意:上传的两个文件包的签名一定要一致 示例命令: jarsigner -verbose -keyst ...

  9. Android Studio使用zxing库扫描并解析条形码

    首先导入zxing库,打开app下的build.gradle位置如下. 打开后在如下位置后,在dependencies中 添加划线的那行代码,即: compile 'com.journeyapps:z ...

最新文章

  1. 这些git技能够你用一年了
  2. ubuntu: Authentication failure的解决办法
  3. MAX_DEPTH, MAX_ROUTERS and MAX_CHILDREN
  4. java文件流操作注意
  5. 服务器系统崩溃文件系统损坏,explorer启动崩溃,提示文件系统错误-2147219200
  6. libreoffice使用_使用LibreOffice Calc管理您的财务
  7. tomcat——轻量级中间件学习
  8. 清掉数据_值得收藏!面试中有哪些经典的数据库问题?
  9. oracle数据库连接违反,Oracle 数据库连接的一些坑
  10. C和指针---读书笔记16
  11. linux service和daemon
  12. loadrunner11破解技巧
  13. Atheros QCA8337交换芯片驱动开发
  14. mysql索引失效的常见原因
  15. python 分析单细胞数据教程 scanpy---初探
  16. java项目1(家庭收支记账软件)
  17. mysql 设置只读事务_只读事务还是只读模式
  18. 日历本(给出年份生成日历)
  19. 如何防止亚马逊账号关联的一些建议值得卖家们收藏?
  20. c#取消word修订痕迹_C# 操作Word批注(一) 插入、修改、删除Word批注

热门文章

  1. FileSystemWatcher 类
  2. 类 Pascal语言词法分析实验(简易版)
  3. html中marquee改变颜色,HTML marquee标签
  4. DROO源码及论文学习
  5. 用编程给正处于高考考场的小伙伴们加油
  6. 索尼手机更新android10,总共8款索尼手机将获得Android 10升级:Xperia 1/5年内开始推送...
  7. 从钱龙数据中读取股票代码信息导入到数据库
  8. 快速完成工作的50个技巧
  9. MPP架构与Hadoop架构是一回事吗?
  10. 好用的笔记软件推荐:Cloud Outliner Pro for Mac