集成支付宝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包的应用签名