В подписанном 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));
}
Для тестирования я использовал этот простой код для создания некоторых дайджестов, которые в основном совпадают с дайджестами META-INF/MANIFEST.MF в apk, но все же имеют небольшое количество исключений. Как этот файл Png:
В apk дайджест для этого png-файла имеет вид 4ss2KZ3FzkmfE6HAAsVu0aJKx1U= , который сильно отличается от sjmKOs4BYDXg7COdeTc8tIfPBR0=, сгенерированного моим кодом выше.
Но как объяснить, что почти 20 дайджестов, сгенерированных моим кодом, такие же, как дайджесты в apk, и только этот дайджест Png отличается?
Не могли бы вы рассказать мне, как SDK или ADT генерируют SHA1-дайджест для ресурсов пакетов приложений Android, или чем он отличается от моего кода?
Большое спасибо!