本文档介绍了应用签名的相关内容,您可在了解文档内容后进行操作。
一、什么是签名?
签名一词来源于生活中常用的术语,还记得刷信用卡会要求客户签名吗?这个签名的作用是确认这笔消费是本人经手的。计算机中所说的签名和生活中所说的签名在本质上是一样的,它所起到的作用也是一致的!为App签名的本质是说明这个App是我开发的,不是别人。用官方的话说,就是在应用和开发者之间建立可信任的关联。
二、为什么要给Android应用程序签名?
这样做的根本原因是Android系统需要一个机制,保证以下几点:
1、拿到一个应用的安装包,能够知道作者是谁。
2、当应用更新时,能够检测是不是作者本人提交的。
3、应用中的部分文件遭到修改时,能够检测到是否为作者本人做出的修改 为了实现上述目的,Android就引入了签名这种比较成熟的方法。
三、签名与应用商店有什么关系?
通过签名的检测和对比,应用商店能够从中识别到开发者的信息,在下面的几个场景中我们会依赖签名:
- 应用的认领。
- 每次应用提交更新,确保是作者本人提交。
- 当有人试图冒充作者提交应用时,应用商店能够阻止该行为。
- 通过签名黑名单,阻止恶意软件作者提交应用。
- 关于签名,我需要注意什么?
下面是你需要注意的要点:
- 所有应用程序必须签名,未经过签名的程序不允许在模拟器或者设备上运行。
- 测试和开发阶段,开发工具会自动生成一个debug key来为应用签名。
- 当应用准备发布时,你需要创建自己的release key来为应用签名,所需要的工具都包含在SDK tools中。
- Android只在应用安装阶段检测签名是否过期,如果签名在应用安装后过期,应用仍可以继续正常使用。
- 你可以使用标准工具——keytool 和 jarsigner/apksigner来生成秘钥和为apk签名。
- 签名前,我们建议你使用zipalign工具来优化apk包。
四、如何签名?
1、准备工作
keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件。
jarsigner:jdk 自带的签名工具,可以对 jar 进行签名。使用 keystore 文件进行签名。生成的签名文件默认使用 keystore 的别名命名。
apksigner:Android sdk 提供的专门用于 Android 应用的签名工具,与jarsigner工具不同的是,jarsigner只支持v1签名;而apksigner支持v1、v2和v3签名,更多关于Android签名的原理,请参看Android关于签名的官方文档。
zipalign:对签名后的apk进行优化,提高与Android系统交互的效率。
2、用keytool生成证书
命令:keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000。
解释:-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;-keystore liufeng.keystore 表示生成的数字证书的文件名为“liufeng.keystore”;-alias liufeng.keystore 表示证书的别名为“liufeng.keystore”,当然可以不和上面的文件名一样;-keyalg RSA 表示生成密钥文件所采用的算法为RSA;-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效。
3、使用apksigner工具为Android应用v1、v2或v3签名(apksigner和jarsigner只要使用其中一种签名工具就可以了,推荐使用apksigner为应用签名)
命令:apksigner sign --v1-signing-enabled true --v2-signing-enabled true --v3-signing-enabled true --ks liufeng.keystore unsigned.apk。
解释:apksigner是工具名称,--v1-signing-enabled true表示添加v1签名,本次命令同时添加v1、v2和v3签名,均使用liufeng.keystore证书。
4、使用zipalign字节优化工具优化apk(非必须但建议这么做)
命令:zipalign -v 4 signed.apk signed_aligned.apk 说明。
解释:zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息; signed.apk signed_aligned.apk 表示对已签名文件signed.apk进行优化,优化后的文件名为signed_aligned.apk。
需要注意的是,如果使用jarsigner工具,可以在签名后使用zipalign工具优化;如果使用apksigner工具进行签名,签名完成不得使用zipalign工具优化,这是其签名原理决定的,需要字节优化的话可以提前到签名前进行。
五、注意事项
1、签名方案与安卓版本
为了最大限度地提高兼容性,请按照 v1、v2、v3 的先后顺序采用所有方案对应用进行签名。与只通过 v1 方案签名的应用相比,还通过 v2+ 方案签名的应用能够更快速地安装到 Android 7.0 及更高版本的设备上。更低版本的 Android 平台会忽略 v2+ 签名,这就需要应用包含 v1 签名,目前具体的限制有:
Android 7 (sdk version 24)以下必须有v1签名,如果没有,apksigner验证签名失败;
Android11(sdk version 30)及以上必须有v2签名,如果只有v1签名,apksigner验证签名通过,但是设备装不上apk。
2、关于v3签名方案
Android 9 支持APK密钥轮替,这使应用能够在APK更新过程中更改其签名密钥。为了实现轮替,APK必须指示新旧签名密钥之间的信任级别。需要注意的是,如果使用轮替签名,那么对于同一个apk,如果想在设备上正常更新的话,必须满足新版本apk的轮替签名证书和历史签名证书完全涵盖了历史版本apk的所有签名证书。简而言之,针对原始签名的apk,如果使用不同的证书生成不同的轮替签名的apk,那么他们之间将不能覆盖更新。
以上为应用签名的相关内容,如您仍有问题,可联系客服,与我们取得联系。