【签名】针对Flash AIR安卓的签名方式
在用AIR做的安卓项目发布的时候会自己进行签名。无论是flash builder 还是 flash cs 之类的。但这些只是一般情况下。在特殊情况下我们可能会对打好的包再次进行签名。比如上传某平台需要下载一个空包签名后进行签名验证。这个以前是遇到过,另一种我遇到的 则是
以前的apk上传google play的时候没有接入gp 的SDK,而最近需要接入gp的SDK,并且我们是易接首选,自己接入次之,这样快一些。所以按照以前的流程用易接打好包之后上传,结果出现签名不一致。最终发现 易接在打包过程中是有签名选项的。一共有三种
即 默认签名(易接自己的签名) 无签名 导入自己的签名(此签名需要的是keystore格式的 但是我们用的是p12) 几经寻找,终于完成签名。现记录在下
查找签名文件,找到别名
查找别名在后续的语句中会用到,使用的工具是JDK的KeyTool,语句格式如下:
进入到安装的JDK目录 的bin里面 按住shift 并鼠标右键 打开cmd (原谅我不会用命令 不过感觉这样方便点)
keytool -list -storetype PKCS12 -keystore d:/soft/xx.p12
其中:“d:/soft/xx.p12”是签名文件。
对文件进行签名操作
使用JDK的工具jiasigner,语句格式如下:
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -storetype PKCS12 -signedjar d:/soft/Signed.apk -keystore d:/soft/xx.p12 d:/soft/ab.apk “1”
其中:“d:/soft/Signed.apk”是签名后的结果文件,“d:/soft/xx.p12”是签名文件,“d:/soft/ab.apk”是原始文件,“1”是上面查到的别名。
需要注意的是:
注意:参数“-sigalg MD5withRSA -digestalg SHA1”是平台要求的,不同平台可能会有所不同,只要照抄就行;参数“-storetype PKCS12”是为了说明签名文件是PKCS12(.P12)格式,必须这样写。
出现异常:
上面说过 在用易接进行打包SDK时 他会有几个签名选项,如果使用的是 默认签名 或者 自己导入的其他格式的签名 那么用此方法进行p12签名是可能会出现下面的异常
jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected 2050 but got 2072 bytes)
解决方法是 去掉签名。生成一个无签名的包,那么在易接工具里面就选择 无签名选项 再次打包 即可
补充 查看apk签名信息 命令行
jarsigner -verify -verbose -certs apk_path.apk
可以查看签名证书的一些信息 比如 公司 持有者 起始日期 到期日期等