Android要求所有的应用必须进行数字签名才可以发布,也就是我们平时所说的使用证书打包然后上传市场。这个签署的过程又包括创建和存储证书,使用不同证书签署不同的构建配置,及自动签署过程。
重要的角色:证书和密钥库
公钥证书又称为数字证书和身份证书包含公钥/私钥对的公钥,以及可以标识密钥所有者的一些其他元素,例如名称和位置,证书持有者持有对应的私钥
在签署工具签署我们的APP时,会自动将我们的公钥证书附加到APK中,并且关联到该证书的持有者及持有者拥有的对应私钥,这样就保证了应用的每次更新都来自原创者。
用于创创建此公钥证书的密钥称为应用签名密钥,也就是我们所说的密钥。
从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 生成应用签名或上传密钥,步骤如下:
3.在new key store窗口上,为密钥和密钥库配置以下信息
Key store path:创建密钥库的位置
Certificate:为证书输入一些关于您自己的信息。此信息不会显示在应用中,但会作为 APK 的一部分包含在您的证书中
然后点击OK,这样我们的密钥库和密钥就生成了,然后就可以用来签署我们的APK了
使用Android Studio可以一次签署单个或多个APK,当然我们也可以将Gradle构建设置配置为在构建流程期间自动处理签署。
在Android Studio中我们可以创建一个签署配置并分配至发布构建类型,这样就可以将我们的项目配置为在构建流程中自动签署并发布APK。一个签署配置包括一个密钥库(jks文件)的位置,密钥库的密码(Key Store password),密钥别名(Key alias),密钥密码(key password),要使用Android Studio创建一个签署配置并分配至发布构建类型,须按以下步骤:
如果我们的应用在发布在不同的市场并且以各自的方式签署发布,那我们可以创建更多的签署配置并分配给对应的市场:
在 Project 窗口中,右键点击您的应用并点击 Open Module Settings。
为什么在软件的生命周期内要使用相同的证书签署应用呢?原因如下:
在我们创建签署信息时,Android Studio会以纯文本的形式将签署信息添加到模块的build.gradle文件中,如果您是团队协作开发或者将您的代码开源,那么您应当将此敏感信息从构建文件中移出,以免被其他人轻易获取。为此,您应创建一个单独的属性文件来存储安全信息并按以下步骤操作,在您的构建文件中引用该文件:
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']
}
}
...
}
以上就是小白对签署应用做的一些总结,希望对大家有所帮助!后面小白会介绍如何从命令行签署一个应用!