参考地址:http://www.cnblogs.com/Ave-Maria/p/6274704.html
1.签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
a.创建key
b.使用步骤a中产生的key对apk签名
3.具体操作
方法一: 命令行下对apk签名(原理)
创建key,需要用到keytool.exe (位于jdk1.6.0_24jrein目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk1.6.0_24in目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入
D:>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
/*说明: -genkey 产生密钥
-alias demo.keystore 别名 demo.keystore
-keyalg RSA 使用RSA算法对签名加密
-validity 40000 有效期限4000天
-keystore demo.keystore
*/
D:>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
/*说明: -verbose 输出签名的详细信息
-keystore demo.keystore 密钥库位置
-signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore.
*/
注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。
注:1.生成密钥很顺利,但是在添加签名时,提示 jarsigner: 找不到demo的证书链。demo必须引用包含私有密钥和相应的公共密钥证书链的有效密钥库密钥条目。
网上百度了一番 才知道,
jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore 中最后两个单词 demo.keystore应该改为demo,最后应该写的是keystore中的别名而不是keystore文件
即:jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo
2.在签名之前,要先生成未默认签名的apk文件 使用 ionic build android --prod --release
然后将之前生成的密钥与生成的未签名apk放在一起,cmd 进入该目录,执行 jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo