1

署名付き apk には、META-INF/MANIFEST.MFファイルがあります。このファイルでは、次のようなダイジェストを見つけることができます。

名前: res/layout/main.xml SHA1 ダイジェスト: NJ1YLN3mBEKTPibVXbFO8eRCAr8=

名前: AndroidManifest.xml SHA1 ダイジェスト: BlnC6ZBDtQYWeJNiespsQve82wY=

名前: res/drawable-mdpi/ic_launcher.png SHA1 ダイジェスト: 4ss2KZ3FzkmfE6HAAsVu0aJKx1U=

次のように Java でダイジェストを生成する方法を見つけました。

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));
}

テストのために、この単純なコードを使用していくつかのダイジェストを生成しました。これは apk のMETA-INF/MANIFEST.MF のダイジェストとほとんど同じですが、少数の例外があります。この Png ファイルのように:ここに画像の説明を入力

apk では、この png ファイルのダイジェストは4ss2KZ3FzkmfE6HAAsVu0aJKx1U=であり、上記のコードで生成されたsjmKOs4BYDXg7COdeTc8tIfPBR0=とは大きく異なります。

しかし、私のコードによって生成されたほぼ 20 のダイジェストがあることを説明する方法は、apk のダイジェストと同じであり、この Png のダイジェストだけが異なりますか?

Android アプリケーション パッケージのリソースに対して SDK または ADT が SHA1-Digest を生成する方法、または私のコードとの違いを教えてください。

どうもありがとう!

4

1 に答える 1

2

The aapt Android tool that creates the APK files does some processing to its inputs. In addition to converting XML resources to binary form, it also optimizes PNG files. You are most likely taking the hash of the original PNG file, while the PNG file in APK has been somehow processed (compressed, etc.), and it's hash (digest) is different. If you unzip an exported APK and take the hash of the PNG inside the package, you should get the same hash value.

于 2012-05-24T09:00:01.320 に答える