转:http://blog.csdn.net/sgz_china/article/details/8060315
1.这两天搞ant打apk的,到签名apk的时候发现明明签名成功,但是安装时死活提示无数字证书。
同事的机器上签名后可以正常安装,但是在我机器上却不行,最后发现同事JDK版本1.6的,我是1.7的。
最后在网上查了资料解决的办法,在我们签名的时候,在jarsigner命令后增加两个参数:
-digestalg SHA1
-sigalg
MD5withRSA
使用Ant如下:
2. 后在打包的时候发现在打手动编译的的class后,打dex文件后会发现这个dex里少一些class文件,百思不得其解,
eclipse自动编译的打包正常,为什么执行自己的compile就打不进去了呢?而且还进行过多方对比未发现异常。
后同事打印日志并注意到日志中有很多“ bad class file magic (cafebabe) or version (0033.0000)”的提示。后来在网上
看到有同行也碰到如此问题,是jdk版本原因,jdk1.7编译后会出现,如果你碰到这种情况的话换成jdk1.6就ok了。
3. 另外,注意:
我用Ant打apk的,打完后运行时会因为NotFoundClassException,跟踪后发现打包路径直接写成文件夹不行。如下:
把<arg value="${outdir-classes-ospath}" />改为<arg value="${outdir-classes-ospath}/*" />,否则可能会在打dex包的时候class文件并没有真正的打进去。
对于JDK
1.7,keytool生成的keystore默认签名算法是SHA256,Android早期版本不支持,所以
一种办法是创建keystore的时候用该默认算法:
keytool
-genkeypair时加入以下参数
-sigalg SHA1withDSA -keyalg DSA -keysize
1024
如果keystore已经在项目中确定,不能随意更改,那么就只能在jarsigner调用的时候按最上方的做法,加入以下参数:
-sigalg
SHA1withDSA -digestalg SHA1
原文:http://www.cnblogs.com/xhqgogogo/p/3699419.html