2016-12-23 遇到的一点小问题
之前使用Eclipse,获取应用MD5签名都能直接在打包前看到的,不管是正式key还是测试的。后来换成Android Studio,就比较麻烦了,得用命令行,这个网上找一下有很多。
不过因为懒得记,所以都选择安装的腾讯QQ开放平台下载的获取签名的apk,经常忘了在哪下载,现在放到自己的网盘了。 apk和jar
今天正好项目里要拿到,就网上找找相关代码,结果网上搜的都是这一堆,运行后会返回一堆字符串,完全看不懂。。。
try {
/** 通过包管理器获得指定包名包含签名的包信息 **/
PackageInfo packageInfo = getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, PackageManager.GET_SIGNATURES);
/******* 通过返回的包信息获得签名数组 *******/
Signature[] signatures = packageInfo.signatures;
StringBuilder builder = new StringBuilder();
/******* 循环遍历签名数组拼接应用签名 *******/
for (Signature signature : signatures) {
builder.append(signature.toCharsString());
}
/************** 得到应用签名 **************/
String signature = builder.toString();
Log.e("获取应用签名", BuildConfig.APPLICATION_ID + "__" + signature);
} catch (Exception e) {
e.printStackTrace();
Log.e("获取应用签名", "异常__" + e);
}
没办法,懒得找了,就反编译把相关代码拿出来看看。
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, PackageManager.GET_SIGNATURES);
String signValidString = getSignValidString(packageInfo.signatures[0].toByteArray());
Log.e("获取应用签名", BuildConfig.APPLICATION_ID + "__" + signValidString);
} catch (Exception e) {
Log.e("获取应用签名", "异常__" + e);
}
private String getSignValidString( byte[] paramArrayOfByte) throws NoSuchAlgorithmException {
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(paramArrayOfByte);
return toHexString(localMessageDigest.digest());
}
public String toHexString(byte[] paramArrayOfByte) {
if (paramArrayOfByte == null) {
return null;
}
StringBuilder localStringBuilder = new StringBuilder(2 * paramArrayOfByte.length);
for (int i = 0; ; i++) {
if (i >= paramArrayOfByte.length) {
return localStringBuilder.toString();
}
String str = Integer.toString(0xFF & paramArrayOfByte[i], 16);
if (str.length() == 1) {
str = "0" + str;
}
localStringBuilder.append(str);
}
}
试了一下,能正常获取了。
然后加一句:
包名.BuildConfig
这个类挺好用的。BuildConfig.APPLICATION_ID
直接获取当前应用包名;BuildConfig.FLAVOR
获取当前渠道包名;BuildConfig.DEBUG
判断是不是debug包,之前都是打包前手动改某个boolean。感谢四木说的这个类。