目录

1、获取应用包名

  1. String packageName = getApplicationContext().getPackageName();

2、获取应用摘要

  1. MessageDigest messageDigest = getMessageDigest();
  2. private MessageDigest getMessageDigest() {
  3.    MessageDigest messageDigest = null;
  4.    try {
  5.        messageDigest = MessageDigest.getInstance("SHA-256");
  6.    } catch (NoSuchAlgorithmException e) {
  7.        Log.e(TAG, "No Such Algorithm.", e);
  8.    }
  9.    return messageDigest;
  10. }

3、获取应用签名

  1. String signature = getSignature(mContext, PackageName);
  2. private String getSignature(Context context, String packageName) {
  3.    PackageManager packageManager = context.getPackageManager();
  4.    Signature[] signatureArrs;
  5.    try {
  6.        signatureArrs = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures;
  7.    } catch (PackageManager.NameNotFoundException e) {
  8.        Log.e(TAG, "Package name inexistent.");
  9.        return "";
  10.    }
  11.    if (null == signatureArrs || 0 == signatureArrs.length) {
  12.        Log.e(TAG, "signature is null.");
  13.        return "";
  14.    }
  15.    return signatureArrs[0].toCharsString();
  16. }

4、获取HashCode

  1. String hashCode = getHashCode(packageName,messageDigest,signature);
  2. private String getHashCode(String packageName, MessageDigest messageDigest, String signature) {
  3.    String appInfo = packageName + " " + signature;
  4.    messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
  5.    byte[] hashSignature = messageDigest.digest();
  6.    hashSignature = Arrays.copyOfRange(hashSignature, 0, 9);
  7.    String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);
  8.    base64Hash = base64Hash.substring(0, 11);
  9.    return base64Hash;
  10. }