您的位置:首页 > 移动开发 > Android开发

Android 根据包名,获取应用程序的签名

2016-04-23 18:17 405 查看

前言

最近在做一键分享功能。集成微信分享时,需要获取应用程序的签名,微信开放平台也提供了相应的小工具(下载地址),帮助我们获得签名。坑就坑在,这个小工具直接把签名字符串写在了 TexView ,不开源,不输出日志,不能拷贝,只能手抄。这点是非常不舒服的。



所以,我花了点时间,根据它的源代码,另外做了一个小工具。核心代码基本是参考微信的,没有做改动。

核心代码

MainActivity.java

/**
* 输出成功信息
* @param code
*/
private void stdout(String code) {
mTvSuccessResult.setText(code);

// 输出正确日志
Log.d(TAG, "stdout() called with: " + "code = [" + code + "]");
}

/**
* 输出错误信息
* @param reason
*/
private void errout(String reason) {
mTvErrorResult.setText(reason);

// 输出错误日志
Log.d(TAG, "errout() called with: " + "reason = [" + reason + "]");
}

private Signature[] getRawSignature(Context paramContext, String paramString) {
if ((paramString == null) || (paramString.length() == 0)) {
errout("获取签名失败,包名为 null");
return null;
}
PackageManager localPackageManager = paramContext.getPackageManager();
PackageInfo localPackageInfo;
try {
localPackageInfo = localPackageManager.getPackageInfo(paramString, PackageManager.GET_SIGNATURES);
if (localPackageInfo == null) {
errout("信息为 null, 包名 = " + paramString);
return null;
}
} catch (PackageManager.NameNotFoundException localNameNotFoundException) {
errout("包名没有找到...");
return null;
}
return localPackageInfo.signatures;
}

/**
* 开始获得签名
* @param packageName 报名
* @return
*/
private void getSign(String packageName) {
Signature[] arrayOfSignature = getRawSignature(this, packageName);
if ((arrayOfSignature == null) || (arrayOfSignature.length == 0)){
errout("signs is null");
return;
}

stdout(Md5.getMessageDigest(arrayOfSignature[0].toByteArray()));
}


MD5.java

public final class Md5
{
public static final String getMessageDigest(byte[] paramArrayOfByte)
{
char[] arrayOfChar1 = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 };
try
{
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(paramArrayOfByte);
byte[] arrayOfByte = localMessageDigest.digest();
int i = arrayOfByte.length;
char[] arrayOfChar2 = new char[i * 2];
int j = 0;
int k = 0;
while (true)
{
if (j >= i)
return new String(arrayOfChar2);
int m = arrayOfByte[j];
int n = k + 1;
arrayOfChar2[k] = arrayOfChar1[(0xF & m >>> 4)];
k = n + 1;
arrayOfChar2
= arrayOfChar1[(m & 0xF)];
j++;
}
}
catch (Exception localException)
{
}
return null;
}

public static final byte[] getRawDigest(byte[] paramArrayOfByte)
{
try
{
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(paramArrayOfByte);
byte[] arrayOfByte = localMessageDigest.digest();
return arrayOfByte;
}
catch (Exception localException)
{
}
return null;
}
}


效果





尽情的复制吧。。

APK 下载

下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: