Как программно рассчитать хеш файла APK? - PullRequest
0 голосов
/ 20 мая 2019

Я хочу вычислить MD5-хэш APK-файла из приложения.

PackageInfo info = App.getInstance().getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA);
File file = new File(info.applicationInfo.sourceDir);
String hash = MD5.calculateMD5(file);

Хеш MD5 рассчитывается так:

private String calculateMD5() {

    MessageDigest digest;

    try {
        digest = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
        return null;
    }

    InputStream is;
    try {
        is = new FileInputStream(file);
    } catch (FileNotFoundException e) {
        return null;
    }

    byte[] buffer = new byte[8192];
    int read;
    try {
        while ((read = is.read(buffer)) > 0) {
            digest.update(buffer, 0, read);
        }
        byte[] md5sum = digest.digest();
        BigInteger bigInt = new BigInteger(1, md5sum);
        String output = bigInt.toString(16);
        output = String.format("%32s", output).replace(' ', '0');
        return output;
    } catch (IOException e) {
        throw new RuntimeException("Unable to process file for MD5", e);
    } finally {
        try {
            is.close();
        } catch (IOException e) {
        }
    }
}

Однако я продолжаю получать один и тот же хеш при работе в эмуляторе, даже когда меняю исходный код.

Что здесь не так?

1 Ответ

1 голос
/ 20 мая 2019

Дважды проверьте, что вы действительно используете измененную сборку. Я предлагаю полностью удалить, а затем переустановить после изменения кода. Я усвоил этот трудный путь после двухчасовой отладки веб-приложения и обнаружил, что я не развернул внесенное мной изменение.

...