尚拙

一个分享技术、学习成长的个人博客网站

0%

Android 通过代码获取应用签名

集成支付宝SDK、微信支付SDK等SDK时,经常需要填写应用签名信息。

这里记录一下通过代码获取当前应用的应用签名。

/**
* 获取应用程序的签名信息
*
* @param context 应用上下文
* @return 应用签名的字符串表示形式
*/
public static String getApplicationSignature(Context context) {
try {
// 获取包管理器
PackageManager packageManager = context.getPackageManager();
// 获取包信息,第二个参数指定获取额外的信息,SIGNATURES表示获取签名信息
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);

// 检查是否获取到了签名信息
if (packageInfo.signatures != null && packageInfo.signatures.length > 0) {
// 获取第一个签名对象
android.content.pm.Signature signature = packageInfo.signatures[0];
// 将签名转换成字符串格式,这里使用MD5算法
return signatureToMD5(signature);
} else {
return null;
}
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}

/**
* 将签名对象转换为MD5格式的字符串
*
* @param signature 应用签名对象
* @return MD5格式的字符串
*/
private static String signatureToMD5(android.content.pm.Signature signature) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(signature.toByteArray());
byte[] digest = md.digest();
StringBuilder hexString = new StringBuilder();
for (byte b : digest) {
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
return null;
}
}

如上所示,调用getApplicationSignature()函数即可获取当前应用签名信息。

注意:Debug包注意要在build.gradle文件配置正式签名文件,才能获取release包的应用签名