以下是自己一天找资料的成果,留作以后方便使用;

直接对apk文件签名需用到jdk\jre\bin中的keytool和jarsigner工具;

密钥文件:daguu-release-key.keystore

未签名的apk文件:tap_unsign.apk

签名命令:

jarsigner –verbose –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-release-key.keystore

签名命令(带别名):

jarsigner –verbose –keystore daguu.keystore –signedjar tap_signed.apk tap_unsign.apk 'daguu'(此处为别名)

签名算法1:

-sigalg SHA1withDSA -digestalg SHA1

jarsigner –verbose -sigalg SHA1withDSA -digestalg SHA1 –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-

release-key.keystore

签名算法2(使用中):

-digestalg SHA1 -sigalg MD5withRSA

(使用中)

jarsigner –verbose -digestalg SHA1 -sigalg MD5withRSA –keystore daguu-release-key.keystore –signedjar tap_signed.apk tap_unsign.apk daguu-

release-key.keystore

修改密钥文件别名命令:

keytool -changealias -keystore daguu-release-key.keystore -alias daguu -destalias daguu-release-key.keystore

应该注意jdk1.6与jdk1.7的apk签名方法有所不同,需要在jarsigner中加入签名算法。默认的key pair生成器算法是DSA,签名算法是从底层的private key的算法继

承来的:如果底层private key的类型是DSA,那么默认的签名算法就是SHA1withDSA,如果底层private key的类型是RSA,那么默认的签名算法就是MD5withRSA。

遇到的问题:

1,jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目

解决办法:在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同;否则就会出现此错误;出现

此错误后可以通过修改密钥文件的别名解决,或者使用带别名的签名命令(未成功,原因未知);

2,apk签名 此jar中包含证书链未验证部分 (签名成功,但是安装不了-认证失败)

解决办法:极大部分是jdk版本的原因,此次使用的是jdk1.7版本,但错误的使用了jdk1.6版本的签名方法,在jarsigner中加入签名算法即可;

3,jarsigner错误:java.security.signtureException:private key algorithm is not compatible with signature algorithm

解决办法:此处可能是aligner加入的算法错误,此次使用的是“签名算法二”,错误的使用了“算法一”导致此错误;

4,未提供 -tsa或-tsacert,此jar没有时间戳

解决办法:暂时没有找到解决办法,但是不影响签名操作,且签名有效期可能只有24年;

5,jarsigner不是内部命令错误

解决办法:可能是环境变量配置问题,或者bin文件夹缺少jarsigner

附带资源网址:http://linfengdu.blog.163.com/blog/static/1177107320121023112855787/

http://214zhu.blog.163.com/blog/static/148692220125651656616/

另:关于app安全问题

如果android项目未引入外来jar包,可直接找到project.properties文件中的proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-

project.txt,然后去掉这一行的注释即可;

如果引入了外来包,可能需要制定混淆规则;