Android obtains the signature of the application based on the package name

Preface

Recently working on one-click sharing function. When integrating WeChat sharing, we need to obtain the signature of the application. The WeChat open platform also provides corresponding gadgets (Download address) to help us obtain signatures. The pitfall is that this small tool directly writes the signature string in TexView. It is not open source, does not output logs, cannot be copied, and can only be copied by hand. This is very uncomfortable.

Insert image description here

So, I spent some time and made another small tool based on its source code. The core code basically refers to WeChat and has not been changed.

core code

MainActivity.Java

  /**
     * 输出成功信息
     * @param code
     */
    private void stdout(String code) {
    
    
        mTvSuccessResult.setText(code);
 
        // 输出正确日志
        Log.d(TAG, "stdout() called with: " + "code = [" + code + "]");
    }
 
    /**
     * 输出错误信息
     * @param reason
     */
    private void errout(String reason) {
    
    
        mTvErrorResult.setText(reason);
 
        // 输出错误日志
        Log.d(TAG, "errout() called with: " + "reason = [" + reason + "]");
    }
 
    private Signature[] getRawSignature(Context paramContext, String paramString) {
    
    
        if ((paramString == null) || (paramString.length() == 0)) {
    
    
            errout("获取签名失败,包名为 null");
            return null;
        }
        PackageManager localPackageManager = paramContext.getPackageManager();
        PackageInfo localPackageInfo;
        try {
    
    
            localPackageInfo = localPackageManager.getPackageInfo(paramString, PackageManager.GET_SIGNATURES);
            if (localPackageInfo == null) {
    
    
                errout("信息为 null, 包名 = " + paramString);
                return null;
            }
        } catch (PackageManager.NameNotFoundException localNameNotFoundException) {
    
    
            errout("包名没有找到...");
            return null;
        }
        return localPackageInfo.signatures;
    }
 
    /**
     * 开始获得签名
     * @param packageName 报名
     * @return
     */
    private void getSign(String packageName) {
    
    
        Signature[] arrayOfSignature = getRawSignature(this, packageName);
        if ((arrayOfSignature == null) || (arrayOfSignature.length == 0)){
    
    
            errout("signs is null");
            return;
        }
 
        stdout(Md5.getMessageDigest(arrayOfSignature[0].toByteArray()));
    }

MD5.java

public final class Md5
{
    
    
    public static final String getMessageDigest(byte[] paramArrayOfByte)
    {
    
    
        char[] arrayOfChar1 = {
    
     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 };
        try
        {
    
    
            MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
            localMessageDigest.update(paramArrayOfByte);
            byte[] arrayOfByte = localMessageDigest.digest();
            int i = arrayOfByte.length;
            char[] arrayOfChar2 = new char[i * 2];
            int j = 0;
            int k = 0;
            while (true)
            {
    
    
                if (j >= i)
                    return new String(arrayOfChar2);
                int m = arrayOfByte[j];
                int n = k + 1;
                arrayOfChar2[k] = arrayOfChar1[(0xF & m >>> 4)];
                k = n + 1;
                arrayOfChar2[n] = arrayOfChar1[(m & 0xF)];
                j++;
            }
        }
        catch (Exception localException)
        {
    
    
        }
        return null;
    }
 
    public static final byte[] getRawDigest(byte[] paramArrayOfByte)
    {
    
    
        try
        {
    
    
            MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
            localMessageDigest.update(paramArrayOfByte);
            byte[] arrayOfByte = localMessageDigest.digest();
            return arrayOfByte;
        }
        catch (Exception localException)
        {
    
    
        }
        return null;
    }
}

Effect

Insert image description here

Insert image description here

That’s it, thank you for your patronage!

Guess you like

Origin blog.csdn.net/zxz_zxz_zxz/article/details/131044868