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 下载
下载地址相关文章推荐
- Android中的Bitmap
- Y3_01_关于专业技能
- 自定义FlowLayout,支持多种布局优化--android-flowlayout
- Android邮件发送详解
- Android百度地图开发(二):显示地图界面
- Android系统自带样式 @android:style
- Android学习(40) -- 自定义控件(4)广告轮播(ViewPager)
- Android SensorManager分析
- 搭建Android底层开发环境
- Android自定义最简单的dialog
- Android驱动开发前的准备
- Android自定义控件之继承ViewGroup创建新容器(四)
- Android百度地图开发(一):地图下载与配置
- android 常用color代码
- Android自定义View实战-100行带你写出SwitchButton
- Android Services 创建一个Bound服务
- 直接拿来用!最火的Android开源项目(完结篇)
- Android-Intent详解
- Android mvp的简单使用和实现
- Android-自定义PopupWindow