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

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

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

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

/**
	 * 获取签名信息
	 *
	 * @param aContext
	 *            Context
	 * @return 签名String
	 */
	@SuppressWarnings("unused")
	private byte[] getSign(String mPakgeName) {

		List<PackageInfo> apps = pManager.getInstalledPackages(PackageManager.GET_SIGNATURES);

		Iterator<PackageInfo> iter = apps.iterator();

		PackageInfo info;
		while (iter.hasNext()) {
			info = iter.next();

			if (TextUtils.equals(info.packageName, mPakgeName)) {
				if (info.signatures.length > 0) {
					return info.signatures[0].toCharsString().getBytes();
				}
			}
		}
		return null;
	}

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

	 /** 得到签名.
	 * @param mPakgeName
	 * @return
	 */
	private String  getgetSignMd5(String mPakgeName) {
		    byte[] signatture = getSign(mPakgeName);

		    if (signatture == null) {
	            return null;
	        }

		    if (TextUtils.isEmpty(signatture.toString()))  {
		       return null;
		    }

	    	try {
				digest = MessageDigest.getInstance("Md5");
				digest.update(signatture);
			} catch (NoSuchAlgorithmException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			//此处为第三方应用使用的签名算法
	    	  byte[] b = digest.digest();
	    	  char[] HEXCHAR = {
	    			  //列举一个签名算法 ,此处应是你方应用自己的算法
	                  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
	                  'a', 'b', 'c', 'd', 'e', 'f'
	          };
	          StringBuilder sb = new StringBuilder(b.length * 2);

	          for (int i = 0; i < b.length; i++) {
	              sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);
	              sb.append(HEXCHAR[(b[i] & 0x0f)]);
	          }

			return sb.toString();
	 }

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

/** 获取非预装的app
	 * @return
	 */
	public static List<PackageInfo> getAllApps() {
	    apps = new ArrayList<PackageInfo>();
	    paklist = pManager.getInstalledPackages(0);
	    for (int i = 0; i < paklist.size(); i++) {
	        PackageInfo pak = (PackageInfo) paklist.get(i);
	        //判断是否为非系统预装的应用程序
	        if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) { 

	            apps.add(pak);
	        }
	    }
	    return apps;
	}

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. YAML 在Python中的配置应用

    环境搭建 YAML语法 语法规则 数据结构 列表数组 原子量 YAML应用 案例 load dump 总结 YAML是一个堪比XML,JSON数据格式的更加方便,简洁的,易于人眼阅读的序列化数据格式. ...

  2. 集群技术(二) MySQL集群简介与配置详解

    when?why? 用MySQL集群? 减少数据中心结点压力和大数据量处理(读写分离),采用把MySQL分布,一个或多个application对应一个MySQL数据库.把几个MySQL数据库公用的数据 ...

  3. pdflush进程详解

    一.简介     由于页高速缓存的缓存作用,写操作实际上会被延迟.当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据.在内存中累积起来的脏页最终必须被写回磁盘.在以下两种情况发生时, ...

  4. Zookeeper动态更新服务器列表

    -------------------------------------------------------------------------------------- [版权申明:本文系作者原创 ...

  5. 全废话SQL Server统计信息(1)——统计信息简介

    当心空无一物,它便无边无涯.树在.山在.大地在.岁月在.我在.你还要怎样更好的世界?--张晓风<我在> 为什么要写这个内容? 随着工作经历的积累,越来越感觉到,大量的关系型数据库的性能问题 ...

  6. FORM开发实现动态LOV

    方法一.设置lov的记录组 IF :mat_trx.trx_action_id = 1 THEN set_lov_property('lot_number',group_name,'lot_issue ...

  7. CoreText精彩文字轮廓绘制动画的一点改进

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原文在: http://oleb.net/blog/2010/ ...

  8. Apache commons email 使用过程中遇到的问题

    apache-commons-email是对mail的一个封装,所以使用起来确实是很方便.特别的,官网上的tutorial也是极其的简单.但是我也仍然是遇到了没有解决的问题. jar包的添加 mail ...

  9. 剑指offer面试题4 替换空格(java)

    注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...

  10. FORM级别和数据库级别的Trace

     metalink上的文章较全的,中文的可参考我的博客EBS开发技术之trace http://blog.csdn.net/cai_xingyun/article/details/17250971 ...