public class AppUtils {
public static String SHA1 = "SHA1";
public static String MD5 = "MD5";
public static String SHA256 = "SHA256";
/**
* 获取对应类型的签名
*
* @param context
* @param packageName
* @param type
*
* @return
*/
public String getSingInfo(Context context, String type) {
String tmp = null;
Signature[] signs = getSignatures(context, context.getPackageName());
if(signs!=null&&signs.length>0){
tmp = getSignatureString(signs[0], type);
}
return tmp;
}
/**
* 返回对应包的签名信息
*
* @param context
* @param packageName
*
* @return
*/
public static Signature[] getSignatures(Context context, String packageName) {
PackageInfo packageInfo = null;
try {
packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
return packageInfo.signatures;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取相应的类型的字符串(把签名的byte[]信息转换成16进制)
*
* @param sig
* @param type
*
* @return
*/
public static String getSignatureString(Signature sig, String type) {
byte[] hexBytes = sig.toByteArray();
String fingerprint = "";
try {
MessageDigest digest = MessageDigest.getInstance(type);
if (digest != null) {
byte[] digestBytes = digest.digest(hexBytes);
StringBuilder sb = new StringBuilder();
for (byte digestByte : digestBytes) {
sb.append((Integer.toHexString((digestByte & 0xFF) | 0x100)).substring(1, 3));
}
fingerprint = sb.toString();
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return fingerprint;
}
调用: new AppUilts.getSingInfo(context,AppUilts.SHA1 );
命令行获取apk签名: keytool -printcert -jarfile apk绝对路径