准备工作
1.密钥和证书管理工具:keytool
2.优化apk工具:zipalign
打包应用
1.打包apk,命令如下:
$ cordova build --release android
生成release版本的apk (ionic / cordova 命令均可) 。执行完这条命令后,cordova会根据你的config.xml生成一个未签名的apk包,默认存储在(platforms/android/build/outputs/android-release-unsigned.apk)。
2.生成密钥和证书,命令如下:
$ keytool -genkey -v -keystore key_name.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
-genkey执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来
参数说明:
-keystore key_name.keystore 证书的文件名;
-alias alias_name 表示证书的别名
-keyalg RSA 生成密钥文件所采用的算法
-keysize 2048 密钥文件的大小
-validity 10000 该数字证书的有效期;
输入后会要求输入两次密钥文件的密码,并回答一些关于你所在组织机构、地区等问题,回答完成截屏保存即可,密钥文件默认在项目的根目录。
3.签名apk,命令如下:
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore key_name.keystore appName.apk alias_name
注意:alias_name 应与密钥文件中设置的alias_name一致!同时,keystore与apk需要在同一目录才可以使用上面的命令,否则需要手动指定相关文件目录位置。
4.优化(可选)
在Android SDK中的build-tools中包含了一个工具:zipalign,它可以优化apk,apk的MIME其实就是一个zip压缩文件,通过zipalign可以让apk序运行更快,首次被引入是在Android 1.6版本的SDK。
命令如下(先切换至apk所在目录):
$ zipalign -v 4 before.apk after.apk
部分API
- keytool
-genkeypair [OPTION]...
-alias <alias> 要处理的条目的别名
-keyalg <keyalg> 密钥算法名称
-keysize <keysize> 密钥位大小
-sigalg <sigalg> 签名算法名称
-destalias <destalias> 目标别名
-dname <dname> 唯一判别名
-startdate <startdate> 证书有效期开始日期/时间
-ext <value> X.509 扩展
-validity <valDays> 有效天数
-keypass <arg> 密钥口令
-keystore <keystore> 密钥库名称
-storepass <arg> 密钥库口令
-storetype <storetype> 密钥库类型
-providername <providername> 提供方名称
-providerclass <providerclass> 提供方类名
-providerarg <arg> 提供方参数
-providerpath <pathlist> 提供方类路径
-v 详细输出
-protected 通过受保护的机制的口令
使用 “keytool -help” 获取所有可用命令,使用 “keytool -command_name -help” 获取 command_name 的用法
- jarsigner
用法: jarsigner [选项] jar-file 别名 jarsigner -verify [选项] jar-file [别名...]
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 私有密钥的口令 (如果不同)
[-certchain <文件>] 替代证书链文件的名称
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose[:suboptions]] 签名/验证时输出详细信息。
子选项可以是 all, grouped 或 summary
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳颁发机构的位置
[-tsacert <别名>] 时间戳颁发机构的公共密钥证书
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库具有受保护验证路径
[-providerName <名称>] 提供方名称
[-providerClass <类> 加密服务提供方的名称
[-providerArg <参数>]]... 主类文件和构造器参数
[-strict] 将警告视为错误