转载请标明出处:  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. python复杂网络库networkx:算法

    http://blog.csdn.net/pipisorry/article/details/54020333 Networks算法Algorithms 最短路径Shortest Paths shor ...

  2. Dynamics CRM2016 Web Api之更新时间字段值

    前篇我们论述了时间字段的查询,本篇来论述下时间字段的更新. 还是以之前建的当地时间(时间行为为用户当地时间)字段来测试 可以看到web api更新的是数据库的时间,而在前台的反映就是做了加8处理,所以 ...

  3. android Spinner控件详解

    Spinner提供了从一个数据集合中快速选择一项值的办法.默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner ...

  4. (一二九)获取文件的MineType、利用SSZipArchive进行压缩解压

    MineType 简介 文件在网络上以二进制流的方式传播,为了区分不同的文件类型,用MineType来标明. 为什么要获取 文件的拓展名较短,比较好记,但是MineType是很长的,比如docx拓展名 ...

  5. Android开发 Jar mismatch! Fix your dependencies的问题

    有时候,当我们在导入Library的时候,会遇到Jar mismatch! Fix your dependencies这个错误.可能有如下原因: 1.两个项目的android-support-v4.j ...

  6. GCD API记录(二)

    前言 这是关于GCD的第二篇文章,GCD的API有100多个,通过快捷键Option + 单击,可以在Reference中的Grand Central Dispatch (GCD) Reference ...

  7. 贪婪算法(Greedy algorithm)-算法学习之旅(一)

    我研一下学期选修了网络管理,因为是限选课所以我没有认真上课,今天因为快结课考试了,我才去,然后我发现了一个大秘密...... 原来老师从第三节课已经开始讲算法导论的知识了,我是不是错过了什么... 废 ...

  8. UNIX网络编程——UDP回射服务器程序(初级版本)以及漏洞分析

    该函数提供的是一个迭代服务器,而不是像TCP服务器那样可以提供一个并发服务器.其中没有对fork的调用,因此单个服务器进程就得处理所有客户.一般来说,大多数TCP服务器是并发的,而大多数UDP服务器是 ...

  9. 如何正确的理解和解决 ORA-01843:not a valid month

    今天码代码的时候遇到了这个问题,因为oracle用的比较少,所在查询了一下. 顿时傻眼,有很多的贴子说是因为nls_date_language的问题,还要改会话级的NLS_DATE_LANGUAGE设 ...

  10. iOS中 动态启动图GIF的简单设置 韩俊强的博客

    // 设定位置和大小 CGRect frame = CGRectMake(50,340,[UIScreen mainScreen].bounds.size.width / 2,[UIScreen ma ...