快捷搜索:

基于Linux命令行构建Android应用(6)Android应用构建

Android 要求所有利用在安装前必须应用证书进行数字署名。Android 应用该证书来确定一个利用以及其作者身份,该证书不要求由证书发行机构揭橥,是以 Android 利用常常应用自我署名的证书,而开拓者保管证书的私钥。

你可以应用调试和发行两种模式进行署名。在调试模式下 Android SDK 认真自动天生证书并对利用署名,在发行模式下你必要自行天生属于你自己的证书。

调试模式署名

在该模式下,Android SDK 会自动天生一个调试用的证书,并且应用默认密码对利用进行署名,是以当你必要调试你的利用法度榜样时,构建历程无需输入任何密码。

Android Studio 和 Eclipse + ADT 在调试模式下能自动对利用进行署名。

你可以经由过程 USB 连接到你的安卓设备来调试你的利用,但调试模式署名的利用无法用于公开发行。

发行模式署名

在该模式下,你应用自己的证书对利用进行署名:

1. 创建 keystore。keystore 是指一个二进制文件,它包孕了一系列私钥。你必要将你的 keystore 保存在一个安然靠得住的地方。

2. 创建私钥。私钥代表着可以确认利用身份的实体,例如某小我或者公司。

3. 构建项目。天生一个未署名的 .apk。

4. 利用署名。应用你的私钥对未署名的 .apk 进行署名。

完成以上四个步骤后,你就可以在 Google Play 上发行你的利用了[1]。

署名留意事变

在利用的全部生命周期,你都必要应用相同的证书对其进行署名,由于:

● 进级:当安卓系统对一个利用进行更新安装时,会首先对照新旧两个版本的证书,只有二者吻合系统才容许进级。假如在新版本利用中你应用了新的证书,你必须从新命名你的包名,那么对用户而言,他们着实是安装了别的一个利用。

● 模块性:安卓系统容许具有相同证书署名的利用在同一个进程中运行,对系统而言它们是同一个利用。这样的话你就可以按模块支配你的利用,用户可以自力进级各个模块。

● 按权限分享代码和数据:安卓系统供给了一套基于署名的权限治理系统,是以当一个利用应用了特定的证书署名,那么另一个利用就可以为其供给指定的功能支持。经由过程这套权限治理系统和对多个利用应用相同证书署名,你的利用就可以安然的共享代码和数据。

假如你想要对利用进行后续进级,你就必须包管证书的有效期大年夜于利用的生命周期。一样平常保举有效期为 25 年或者更长。一旦你的密钥过时,用户将无法顺利进级你的利用。

假如你想要在 Google Play 上发行你的利用,你用以署名利用的密钥有效期必须跨越 2033 年 10 月 22 日。这是 Google Play 为了包管用户可以顺利进级他们的利用而采取的强制步伐。

妥善保管私钥

安然妥善的保管你的私钥,无论对你照样用户都是异常紧张的。假如你容许其他人应用你的密钥,或者将 keystore 和密码保管在一个不安然的地方,那将迫害你作为利用所有者身份的认定以及用户的相信。

假如其他人设法在你不知情或未许可的环境下获取了你的密钥,那他就可以恶意发行利用来取代你的利用。他还可以以你的名义进击其他利用或者系统,窃取用户数据。

你的利用未来所有版本都将应用你的私钥进行署名。假如你损掉私钥,你将无法对已发行利用推送更新,你也不能从新天生私钥。

你作为一名开拓者的声望取决于你是否妥善保管你的密钥,以下是保障密钥安然的几个建议:

● 为 keystore 和密钥设置一个壮实的密码。

● 不把私钥交给其他任何人,不奉告任何未授权的人你的 keystore 和私钥密码。

● 将 keystore 和私钥文件保管在一个安然靠得住的地方。

一样平常来说,只要在天生、应用和保管密钥时遵照一个普世安然意识,那么统统就都是安然的。

调试证书过时

调试模式应用的证书有效期为 365 天,当证书过不时,你会获得一个构建差错。

要修复这个问题只要删除 debug.keystore 文件即可。该文件默认保存路径为 ~/.android/ (OS X 或 Linux)或者 C:\Documents and Settings\\.android\ (Windows XP),或 C:\Users\\.android\ (Windows Vista 和 Windows 7)。

在你下次构建时,构建对象会自动天生一个新的 keystore 和调试密钥[2]。

手动署名利用

你可以应用 Android SDK 和 JDK 供给的标准对象来手动署名你的利用。以下演示若何在敕令行以发行模式进行署名:

1. 应用 keytool 对象(由 JDK 供给)天生私钥:

$ keytool -genkey -v -keystore my-release-key.keystore

-alias alias_name -keyalg RSA -keysize 2048 -validity 10000

您可能还会对下面的文章感兴趣: