我在 Eclipse 中通过 ADT 导出了一个 apk,并尝试将此 apk 安装到 avd 中,但它引发了“未安装应用程序”。
我检查了logcat,发现了这个:
W/PackageParser(59): java.lang.SecurityException: META-INF/MANIFEST.MF has invalid digest for res/drawable-mdpi/ic_launcher.png in /data/app/vmdl25264.tmp
E/PackageParser(59): Package com.ep.android has no certificates at entry res/drawable-mdpi/ic_launcher.png; ignoring!
在apk的“META-INF/MANIFEST.MF”文件中,我发现了这个:
Name: res/drawable-mdpi/ic_launcher.png
SHA1-Digest: 4ss2KZ3FzkmfE6HAAsVu0aJKx1U=
所以我尝试使用自己的Java编程为png文件生成一个SHA1-Digest,结果是“sjmKOs4BYDXg7COdeTc8tIfPBR0=”,这是完全不同的。我用于生成 SHA1-Digest 的 Java 代码是:
public static void main(String[] filename) throws NoSuchAlgorithmException,
Exception {
MessageDigest md = MessageDigest.getInstance("SHA1");
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));
}
似乎 avd 和我的代码都认为 apk 的 MANIFEST.MF 中的 SHA1-Digest 无效。所以,我猜 ADT 中的 SHA1-Digest 生成器在这里做错了。它是一个错误吗?还是我错过了什么?