1、获取应用包名
- String packageName = getApplicationContext().getPackageName();
2、获取应用摘要
- MessageDigest messageDigest = getMessageDigest();
- private MessageDigest getMessageDigest() {
- MessageDigest messageDigest = null;
- try {
- messageDigest = MessageDigest.getInstance("SHA-256");
- } catch (NoSuchAlgorithmException e) {
- Log.e(TAG, "No Such Algorithm.", e);
- }
- return messageDigest;
- }
3、获取应用签名
- String signature = getSignature(mContext, PackageName);
- private String getSignature(Context context, String packageName) {
- PackageManager packageManager = context.getPackageManager();
- Signature[] signatureArrs;
- try {
- signatureArrs = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures;
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "Package name inexistent.");
- return "";
- }
- if (null == signatureArrs || 0 == signatureArrs.length) {
- Log.e(TAG, "signature is null.");
- return "";
- }
- return signatureArrs[0].toCharsString();
- }
4、获取HashCode
- String hashCode = getHashCode(packageName,messageDigest,signature);
- private String getHashCode(String packageName, MessageDigest messageDigest, String signature) {
- String appInfo = packageName + " " + signature;
- messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
- byte[] hashSignature = messageDigest.digest();
- hashSignature = Arrays.copyOfRange(hashSignature, 0, 9);
- String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);
- base64Hash = base64Hash.substring(0, 11);
- return base64Hash;
- }