转载请标明出处:  http://write.blog.csdn.net/postedit/45721779作者:skay

一般项目中有防盗版的需求,必须是正版软件才能使用,这就需要获取当前安装包的签名信息和提前规定的签名,Md5值做验证,或者发布时候要检验apk签名信息以防止发错包,造成不必要的损失。

获取签名信息,通过遍历已安装的apk 获得安装过的对应apk是否与已知apk签名一致

,包名你也可以指定任意已安装过的apk,可以获取第三方apk的签名.

  1. /**
  2. * 获取签名信息
  3. *
  4. * @param aContext
  5. * Context
  6. * @return 签名String
  7. */
  8. @SuppressWarnings("unused")
  9. private byte[] getSign(String mPakgeName) {
  10.  
  11. List<PackageInfo> apps = pManager.getInstalledPackages(PackageManager.GET_SIGNATURES);
  12.  
  13. Iterator<PackageInfo> iter = apps.iterator();
  14.  
  15. PackageInfo info;
  16. while (iter.hasNext()) {
  17. info = iter.next();
  18.  
  19. if (TextUtils.equals(info.packageName, mPakgeName)) {
  20. if (info.signatures.length > 0) {
  21. return info.signatures[0].toCharsString().getBytes();
  22. }
  23. }
  24. }
  25. return null;
  26. }

2   得到字节后 ,需要转化出成md5

  1. /** 得到签名.
  2. * @param mPakgeName
  3. * @return
  4. */
  5. private String getgetSignMd5(String mPakgeName) {
  6. byte[] signatture = getSign(mPakgeName);
  7.  
  8. if (signatture == null) {
  9. return null;
  10. }
  11.  
  12. if (TextUtils.isEmpty(signatture.toString())) {
  13. return null;
  14. }
  15.  
  16. try {
  17. digest = MessageDigest.getInstance("Md5");
  18. digest.update(signatture);
  19. } catch (NoSuchAlgorithmException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23.  
  24. //此处为第三方应用使用的签名算法
  25. byte[] b = digest.digest();
  26. char[] HEXCHAR = {
  27. //列举一个签名算法 ,此处应是你方应用自己的算法
  28. '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  29. 'a', 'b', 'c', 'd', 'e', 'f'
  30. };
  31. StringBuilder sb = new StringBuilder(b.length * 2);
  32.  
  33. for (int i = 0; i < b.length; i++) {
  34. sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);
  35. sb.append(HEXCHAR[(b[i] & 0x0f)]);
  36. }
  37.  
  38. return sb.toString();
  39. }

3 有时候我们需要获得非系统apk应用信息

  1. /** 获取非预装的app
  2. * @return
  3. */
  4. public static List<PackageInfo> getAllApps() {
  5. apps = new ArrayList<PackageInfo>();
  6. paklist = pManager.getInstalledPackages(0);
  7. for (int i = 0; i < paklist.size(); i++) {
  8. PackageInfo pak = (PackageInfo) paklist.get(i);
  9. //判断是否为非系统预装的应用程序
  10. if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
  11.  
  12. apps.add(pak);
  13. }
  14. }
  15. return apps;
  16. }

xml 布局很简单 因此不再多说 不说了。比如获取微博的签名信息(传入微博的包名即可)。

apk下载地址:http://download.csdn.net/detail/sk719887916/8828765

Android 获取某apk的签名信息,可用作防盗版进入。的更多相关文章

  1. Android 比对APK的签名信息

    https://www.jianshu.com/p/8583f6a966e2 在做App的时候经常会有验证apk是否为正版的需求,比如一些接入第三方支付的app,接入微信sdk也是需要apk签名信息的 ...

  2. 获取apk的签名信息

    在接入第三方功能时,经常要注册提交apk的签名信息 (sha1签名)?,下面列出相关步骤. 获取apk签名信息的步骤: 1)修改apk后缀名为zip,解压得到其中的META-INF文件夹; 2)把ME ...

  3. Android 获取包名,版本信息

    Android 获取包名,版本信息及VersionName名称     <span style="font-size: 14px;">private String ge ...

  4. android 获取 imei号码 及相关信息

    android 获取 imei号码 参考:http://www.cnblogs.com/luxiaofeng54/archive/2011/03/01/1968063.html 核心代码: Imei ...

  5. android 获取手机GSM/CDMA信号信息,并获得基站信息

    本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表,那如 ...

  6. Apk去签名校验详解

    某些apk为了防止重打包,使用了签名校验.所以在破解的时候我们需要破解签名校验.在定位签名校验位置时常用的关键词有sign,signature,checkSign,signCheck,getPacka ...

  7. android获取未安装APK签名信息及MD5指纹

    站在巨人的肩膀上写博客: http://blog.csdn.net/wulianghuan/article/details/18400581 http://www.jb51.net/article/7 ...

  8. AppCan移动开发技巧:3步走,获取移动APP签名信息

    大家知道,在移动APP开发里,与应用包名一样,应用的签名信息需是唯一的,否则将会出现应用冒领.重复安装等问题.之前分享过安卓应用的签名如何获取(点击查看),这里将继续以AppCan平台为例,分享如何获 ...

  9. android apk的签名和权限问题

    一. android apk的签名问题(http://blog.csdn.net/lyq8479/article/details/6401093) 1.为什么要给Android应用程序签名?      ...

随机推荐

  1. Android服务——Service

    服务 Service 是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到服务,以与之进行 ...

  2. GitHub Android Librarys Top 100 简介

    GitHub Android Librarys Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索J ...

  3. ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)

    ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)      上述博文里提到的在线浏览pdf的方案不错,但word转pdf的那个dll只支持doc不支持docx,附上最新的下载链 ...

  4. iOS 应用提交到iTunes Connect,显示"正在处理"后消失不见

    打包上传iTunes Connect 成功后,进入iTunes Connect 会看到如下的构建信息: 可是,过一会再刷新该页面,构建的版本就消失了. 出现如上所述的情况,主要目前已知的有两种原因: ...

  5. 一起聊聊什么是P问题、NP问题、NPC问题

    概念 P问题:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题.通常NOI和NOIP不属于P类问题,我们常见到的一些信息奥赛的题目都是P问题. NP问题:可以在多项式的 ...

  6. protobuf中的枚举缺省值应该为UNKNOWN

    protobuf中的枚举缺省值应该为UNKNOWN(金庆的专栏)proto3中的枚举值为了与proto2兼容,要求缺省值固定为第1个,值为0.proto2中并没有规定对范围之外的枚举值的处理,而pro ...

  7. 27 自定义View小结

    自定义View 1 为了满足开发需要 就需要自定义View 2 分类: 直接继承View 继承View的子类(现有控件 button,TextView-.) 继承ViewGroup(线性布局 相对布局 ...

  8. nginx平台初识(一)

    众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧. nginx在启动后,在unix系统中会以daemon的方式 ...

  9. 剑指Offer——完美+今日头条笔试题+知识点总结

    剑指Offer--完美+今日头条笔试题+知识点总结 情景回顾 时间:2016.9.28 16:00-18:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:完美世界笔试 ...

  10. Mybatis源码分析之缓存

    一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...