Android 根据包名,获取应用程序的签名

来源:互联网 发布:淘宝卖守门员手套 编辑:程序博客网 时间:2024/05/17 21:52

前言

最近在做一键分享功能。集成微信分享时,需要获取应用程序的签名,微信开放平台也提供了相应的小工具(下载地址),帮助我们获得签名。坑就坑在,这个小工具直接把签名字符串写在了 TexView ,不开源,不输出日志,不能拷贝,只能手抄。这点是非常不舒服的。

这里写图片描述

所以,我花了点时间,根据它的源代码,另外做了一个小工具。核心代码基本是参考微信的,没有做改动。

核心代码

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;    }}

效果

这里写图片描述

这里写图片描述

尽情的复制吧。。

APK 下载

下载地址

1 0
原创粉丝点击