Android 判断debug签名和release签名

判断debug签名和release签名

思路是:
可以获取到package里的签名信息Signature对象,在Signature对象里有hashCode()方法,可以用来标识Signature对象。
目前我采用的方法是先运行release版的app,然后记录下该包里Signature对象的hashcode;在程序里判断取到的Signature对象的hashcode是否与该值相同,相同就是release,否则是debug

public boolean checkAppReleaseVersion() {
    try {
        //获得package里的签名信息Signature对象
        String packageName = context.getPackageName();
        int flags = PackageManager.GET_SIGNATURES;

        PackageInfo packageInfo = pm.getPackageInfo(packageName, flags);

        Signature[] signatures = packageInfo.signatures;
        
        //取第一个加载的activity签名
        byte[] cert = signatures[0].toByteArray();

        String strResult = "";

        //转换成MD5字符来判断
        MessageDigest md;

        md = MessageDigest.getInstance("MD5");
        md.update(cert);
        for (byte b : md.digest()) {
            //byte转成16进制
            strResult += Integer.toString(b & 0xff, 16);
        }
        strResult = strResult.toUpperCase();
        //debug
        if ("DE421D82D4BBF9042886E72AA31FE22".toUpperCase().equals(strResult)) {
            return false;
        }
        //relaease
        if ("C96155C3DAD4CA1069808FBAC813A69".toUpperCase().equals(strResult)) {
            return true;
        }
    } catch (NoSuchAlgorithmException ex) {
        return false;
    } catch (PackageManager.NameNotFoundException ex) {
        return false;
    }
    return false;
}



原文地址:https://www.cnblogs.com/rfheh/p/4164802.html