本文原內容為空,僅提供標題。此處補充核心實現方案:
PackageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)Signature.toByteArray() 獲取證書字節碼MessageDigest.getInstance("SHA-256") 計算摘要
public class ApkSignatureUtil {
public static String getSha256(Context context, String packageName) {
try {
PackageInfo info = context.getPackageManager()
.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
for (Signature sig : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(sig.toByteArray());
byte[] digest = md.digest();
return bytesToHex(digest); // 轉十六進制字符串
}
} catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) sb.append(String.format("%02x", b));
return sb.toString();
}
}
PackageManager.GET_SIGNING_CERTIFICATES 獲取更完整證書鏈<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/> (Android 11+ 查詢所有應用)