Android 根据包名,获取应用程序的签名
来源:互联网 发布:淘宝卖守门员手套 编辑:程序博客网 时间:2024/05/17 21:52
前言
最近在做一键分享功能。集成微信分享时,需要获取应用程序的签名,微信开放平台也提供了相应的小工具(下载地址),帮助我们获得签名。坑就坑在,这个小工具直接把签名字符串写在了 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[n] = 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 下载
下载地址
1 0
- Android 根据包名,获取应用程序的签名
- Android 根据包名,获取应用程序的签名
- Android根据包名获取应用程序的信息
- android根据包名获取签名MD5信息
- [android] apk签名 及 应用程序的“包名”问题
- 根据包名获取应用程序基本信息
- ImageLoader 根据包名获取应用程序图标
- 根据包名获取应用的签名(先将apk安装到手机上)
- Android 获取应用程序的签名
- 通过包名获取应用程序的名称
- 获取手机中应用程序的包名
- apk签名 及 应用程序的“包名”问题
- android获取应用程序签名
- Android应用程序获取系统签名的方法
- Android 根据apk获取应用包名和启动Activity
- android杀掉指定包名的应用程序
- Android 获取应用程序名
- 获取Android的APK包签名信息
- 深入理解JAVA虚拟机(概念泛谈)
- groovy入门5 IO
- 程序的内存分配
- 解决 id_rsa 权限不够
- ACM第二次练习—1023
- Android 根据包名,获取应用程序的签名
- 第九周项目3—人数不定的工资类
- MarkDown学习
- Redis学习笔记(五)Linux下redis的安装
- TCP/UDP 伪首部
- 安卓等边三角形
- Mybatis 批量更新
- Android基础之Android系统架构
- java 类,变量,方法上注解值的获取