如何以编程方式计算 APK 文件的哈希值?
How to calculate hash of APK file programmatically?
我想从应用程序内部计算 APK 文件的 MD5 哈希值。
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) {
}
}
}
然而,当我在模拟器中 运行 时,即使我更改了源代码,我仍然得到相同的哈希值。
这里有什么问题?
仔细检查您是否真的运行反对修改后的版本。我建议完全卸载,然后在更改代码后重新安装。在调试 Web 应用程序两个小时后发现我没有部署我所做的更改后,我通过艰难的方式学到了这一点。
我想从应用程序内部计算 APK 文件的 MD5 哈希值。
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) {
}
}
}
然而,当我在模拟器中 运行 时,即使我更改了源代码,我仍然得到相同的哈希值。
这里有什么问题?
仔细检查您是否真的运行反对修改后的版本。我建议完全卸载,然后在更改代码后重新安装。在调试 Web 应用程序两个小时后发现我没有部署我所做的更改后,我通过艰难的方式学到了这一点。