1.10 应用签名

Android要求所有APK必须先使用证书进行数字签名,然后才能安装。

1.10.1 证书和密钥库

公钥证书(也称为数字证书或身份证书)包含公钥/私钥对的公钥,以及可以标识密钥所有者的一些其他元数据(例如名称和位置)。证书的所有者持有对应的私钥。

在签名APK时,签名工具会将公钥证书附加到APK。公钥证书充当“指纹”,用于将APK唯一关联到你以及对应的私钥。这有助于Android确保APK的任何更新都是原版更新并来自原始作者。用于创建此证书的密钥称为应用签名密钥。

密钥库是一种包含一个或多个私钥的二进制文件。

每个应用在其整个生命周期内必须使用相同的证书,以便用户能够以应用更新的形式安装新版本。

1.10.2 调试项目时签名

当点击Android Studio工具栏上的“Run 'app'”按钮时,Android Studio将自动使用通过Android SDK工具生成的测试证书签名你的APK。

当在Android Studio中首次运行或调试项目时,IDE将自动在$HOME/.android/debug.keystore中创建调试密钥库和证书,并设置密钥库和密钥密码。

由于测试证书通过构建工具创建并且在设计上不安全,大多数应用商店(包括Google Play商店)都不接受使用调试证书签名要发布的APK。

Android Studio会自动将你的测试签名信息存储在签名配置中,因此不必在每次测试时都输入此信息。签名配置是一种包含签名APK所需全部必要信息的对象,这些信息包括密钥库位置、密钥库密码、密钥名称和密钥密码。

1.10.3 正式签名

1. 生成密钥和密钥库

使用Android Studio生成应用签名或上传密钥,具体操作步骤如下:

步骤01在菜单栏中点击Build→Generate Signed APK。

步骤02从下拉列表中选择一个模块,然后点击“Next”。

步骤03点击“Create new”以创建一个新密钥和密钥库。

步骤04在New Key Store对话框中,需要填写以下信息,用来生成密钥文件,如图1-52所示。

图1-52 新建密钥库文件

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

• Password:为密钥库创建并确认一个安全的密码。

• Alias:为密钥输入一个标识名。

• Password:为密钥创建并确认一个安全的密码。此密码应当与密钥库选择的密码不同。

• Validity(years):以年为单位设置密钥的有效时长。密钥的有效期应至少为25年,可以在应用的整个生命期内使用相同的密钥签名应用更新。

• Certificate:为证书输入一些关于自己的信息。例如城市、国家、姓名等基本信息。这些信息不会显示在应用中,但会作为APK的一部分包含在证书中。

填写完表单后,点击OK按钮。这时证书已经生成了(在选择的证书保存路径下有个xxx.jks文件)。

如果想继续签名App,就点击Next按钮;如果只是生成一个签名文件,点击Cancel按钮。

2. 手动签名APK

Android Studio可以手动签名APK,也可以在Gradle配置文件中构建签名信息,运行App时对APK自动签名。

要在App中手动签名APK,操作步骤如下:

步骤01点击Build→Generate Signed APK,打开Generate Signed APK对话框,如图1-53所示。选择刚生成的jks文件、密钥库密码、密钥标示、密钥密码,然后点击Next按钮。

图1-53 签名APK

步骤02在下一个对话框中,选择APK签名之后保存路径,同时可以选择渠道,由于我们没有配置渠道列表,所以Flavors一栏是空的;接下来选择签名版本,V1和V2都选中,然后点击Finish按钮,如图1-54所示。

图1-54 生成签名配置

签名完成之后,就会在选择的签名文件保存路径下生成一个签名之后的APK文件,可以用这个APK发布到各大应用市场。保管好jks文件密码,当每次需要更新版本到应用市场时,需要用这个jks文件进行签名。

3. Gradle自动签名

手动签名很不方便,每次都要创建APK,Google早就想到了这个问题,只需要在build.gradle文件中加几行代码就可以了,以后每次运行App的时候就会用生成的jks文件签名,而不是临时手动签名。

使用自动签名需要修改app/build.gradle文件。在Android标签下增加signingConfigs标签(debug与release版本签名信息设置),如图1-55所示。

图1-55 运行App自动签名