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