Android获取应用包签名(适配Android P)

日常开发中,使用代码检测工具会提示过时方法,以前PackageManager.GET_SIGNATURES,packageInfo.signatures提示过时,现适配Android p,话不多说直接撸代码

/**
     * 获取包签名MD5
     */
    public static String getPackageSign(Context context) {
        String signStr = "-1";
        if (context != null) {
            //获取包管理器
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo;
            //获取当前要获取 SHA1 值的包名,也可以用其他的包名,但需要注意,
            //在用其他包名的前提是,此方法传递的参数 Context 应该是对应包的上下文。
            String packageName = context.getPackageName();
            //签名信息
            Signature[] signatures = null;
            try {
                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
              
                    packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNING_CERTIFICATES);
                    SigningInfo signingInfo = packageInfo.signingInfo;
                    signatures = signingInfo.getApkContentsSigners();
                } else {
                    //获得包的所有内容信息类
                    packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
                    signatures = packageInfo.signatures;
                }
            } catch (Exception e) {
                e.printStackTrace();
             
            }
            if (null != signatures && signatures.length > 0) {
                Signature sign = signatures[0];
                signStr = encryptionMD5(sign.toByteArray()).toUpperCase();
            }
        }
        return signStr;
    }

    private static String encryptionMD5(byte[] byteStr) {
        MessageDigest messageDigest;
        StringBuffer md5StrBuff = new StringBuffer();
        try {
            messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.reset();
            messageDigest.update(byteStr);
            byte[] byteArray = messageDigest.digest();
            for (byte aByteArray : byteArray) {
                if (Integer.toHexString(0xFF & aByteArray).length() == 1) {
                    md5StrBuff.append("0").append(Integer.toHexString(0xFF & aByteArray));
                } else {
                    md5StrBuff.append(Integer.toHexString(0xFF & aByteArray));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5StrBuff.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值