现在的位置: 首页 > 综合 > 正文

JDK1.7签名APK异常

2012年12月19日 ⁄ 综合 ⁄ 共 1611字 ⁄ 字号 评论关闭

1.这两天搞ant打apk的,到签名apk的时候发现明明签名成功,但是安装时死活提示无数字证书。
同事的机器上签名后可以正常安装,但是在我机器上却不行,最后发现同事JDK版本1.6的,我是1.7的。

最后在网上查了资料解决的办法,在我们签名的时候,在jarsigner命令后增加两个参数:

     -digestalg SHA1
     -sigalg MD5withRSA

使用Ant如下:

<target name="jarsigner" depends="package" >
    <exec executable="${jarsigner}" failonerror="true" >
        <arg value="-verbose" />
        <arg value="-digestalg" />
        <arg value="SHA1" />
        <arg value="-sigalg" />
        <arg value="MD5withRSA" />
        <arg value="-keystore" />
        <arg value="${key.store}" />
        <arg value="-storepass" />
        <arg value="${key.store.password}" />
        <arg value="-keypass" />
        <arg value="${key.alias.password}" />
        <arg value="-signedjar" />
        <arg value="${out-signed-package-ospath}" />
        <arg value="${out-unsigned-package-ospath}" />
        <arg value="${key.alias}" />
    </exec>
</target>

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文件并没有真正的打进去。

<!-- 将.class文件转化成.dex文件 -->
<target name="dex" depends="proguard">
	<echo>Converting compiled files and external libraries into a .dex file...</echo>
	<exec executable="${dx}" failonerror="true">
		<arg value="--dex" />
		<arg value="--verbose" />
		<!-- 输出文件 -->
		<arg value="--output=${dex-ospath}" />
		<!-- 要生成.dex文件的源classes和libraries -->
		<arg value="${outdir-classes-ospath}/*" /><!-- 注:${outdir-classes-ospath}"则运行时会抛NotFoundClassException,疑似目录下的class打不进dex -->
		<arg value="${external-lib-ospath}" />
	</exec>
</target>

抱歉!评论已关闭.