`
hardPass
  • 浏览: 8658 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

Application not installed!可能是一个bug,关于SHA1-Digest

阅读更多
我安装apk(sdk 2.2)的时候出现了这个错误:Application not installed!
上网搜索,这个问题的解决方案很多。但都不能解决我现在的问题。

logcat里面的情况是这样的:
引用

W/PackageParser(59): Exception reading res/drawable-mdpi/ic_launcher.png in /data/app/vmdl55069.tmp
W/PackageParser(59): java.lang.SecurityException: META-INF/MANIFEST.MF has invalid digest for res/drawable-mdpi/ic_launcher.png in /data/app/vmdl55069.tmp
W/PackageParser(59): ...
E/PackageParser(59): Package com.Afdaf has no certificates at entry res/drawable-mdpi/ic_launcher.png; ignoring!



于是将apk中的MANIFEST.MF取出来,根据上面错误“META-INF/MANIFEST.MF has invalid digest for res/drawable-mdpi/ic_launcher.png”,找到:
引用

Name: res/drawable-mdpi/ic_launcher.png
SHA1-Digest: 4ss2KZ3FzkmfE6HAAsVu0aJKx1U=


按照错误的提示,猜测问题的关键是这个png图片的SHA1-Digest不正确了。
于是自己写测试代码生成png图片的SHA1-Digest,看看对不对。代码如下:
public static void main(String[] args) throws NoSuchAlgorithmException, Exception {
	MessageDigest md = MessageDigest.getInstance("sha-1");
	FileInputStream in =  new FileInputStream("./ic_launcher.png");
	int bytes = 0;
	while ((bytes = in.read()) != -1) {
		md.update((byte)bytes);
	}
	in.close();
	byte[] thedigest = md.digest();
	System.out.println(Base64Encoder.encode(thedigest));
}

测试ic_launcher.png结果是“sjmKOs4BYDXg7COdeTc8tIfPBR0=”,确实与MANIFEST.MF文件中的不相符。
测试apk中的其他图片,SHA1-Digest则一致。

所以,可以猜测问题就是这里了,为什么ADT打包生成的SHA1-Digest会错误的呢?是不是bug?
这个问题搞不清了。因为无法访问官网,无法发帖求印证、提bug,所以到这边来把问题提出来,看有没有同学遇到类似问题?

对了,附件是个zip,当中有两个文件:1、ic_launcher.png 2、某网友apk

同学们可以测试,只要把该图片(附件中)放在res相关目录中,导出apk,安装时候就出此问题。

另外有网友发他的apk(附件中)给我,他说他测试发现没有问题。我表示怀疑,因为他的apk中的digest也是错误的,并且我测试有同样问题。同样请热心tx帮忙测试以求印证。
  • ks.zip (55 KB)
  • 下载次数: 21
分享到:
评论
5 楼 笑望未来 2012-07-04  
看这个

http://jamesfancy.blog.51cto.com/2516291/752398

JDK6用的SHA1摘要算法,而JDK7生成的那个是用的SHA256。
JDK7居然修改了jarsigner的默认算法!
4 楼 hardPass 2012-07-04  
笑望未来 写道
jdk 7版本会出现这个问题

网上也有说是jdk的问题,可以换jdk解决。
我也因此尝试过换JDK,但是没有用。
我原来JDK是1.6_25的,后来换成1.6_32,还是没解决问题。

但是过了几天,不知道怎么回事,这个问题竟然莫名其妙、好似自己修复了。

之后就再也没出现过此类问题。

因此就不纠结了。
3 楼 笑望未来 2012-07-04  
jdk 7版本会出现这个问题
2 楼 hardPass 2012-07-03  
笑望未来 写道
我也遇到同样问题:
                  1:用jdk 7 生成密钥
                  2:用jarsigner 签名apk
                  3:出现类似问题
解决方法:
                  jarsigner  命令参数增加

                 "-digestalg SHA1 -sigalg MD5withRSA"

                  就解决了



有一段时间因为这个问题我搞了1个星期都没解决,后来机器无缘无故又好了。
再也没重现过这个问题。

谢谢你的解决方法。我机会我要试一下。
1 楼 笑望未来 2012-07-03  
我也遇到同样问题:
                  1:用jdk 7 生成密钥
                  2:用jarsigner 签名apk
                  3:出现类似问题
解决方法:
                  jarsigner  命令参数增加

                 "-digestalg SHA1 -sigalg MD5withRSA"

                  就解决了

相关推荐

Global site tag (gtag.js) - Google Analytics