1

我在 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 生成器在这里做错了。它是一个错误吗?还是我错过了什么?

4

0 回答 0