转载请标明出处:  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. APP自动化框架LazyAndroid使用手册(1)--框架简介

    作者:cryanimal  QQ:164166060 APP自动化简介 APP自动化,即通过自动化的方式,对APP施行一系列的仿按键输入.触摸屏输入.手势输入等操作,以达到对APP的功能进行自动化测试 ...

  2. Windows下Java调用BAT批处理不弹出cmd窗口

    常规Windows下Java调用BAT方式肯定会弹出cmd窗口 Runtime.getRuntime().exec("cmd.exe /C start D:\\test.bat") ...

  3. Redis之(七)主从同步与集群管理

    8.1 主从同步原理 像MySQL一样,Redis是支持主从同步的,而且也支持一主多从以及多级从结构. 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来 ...

  4. Dynamics CRM2011 导入解决方案报根组件插入错误的解决方法

    今天在还原一个老版本的解决方案,在导入时报根组件插入问题"Cannot add a Root Component 38974590-9322-e311-b365-00155d810a00 o ...

  5. Android开发之手把手教你写ButterKnife框架(三)

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了, ...

  6. IntelliJ Idea 设置 Dialyzer

    IntelliJ Idea 设置 Dialyzer(金庆的专栏)Erlang开发使用IDEA IDE可以设置外部工具Dialyzer, 然后就可以直接Tools->External Tools ...

  7. 2014 BDTC 参会有感

    中国大数据技术大会(Big Data Technology Conference,BDTC)是目前国内最具影响.规模最大的大数据领域的技术盛会.大会的前身是Hadoop中国云计算大会(Hadoop i ...

  8. Java进阶(四十四)线程与进程的特征及区别

    线程与进程的特征及区别 定义及特征 进程   指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令.数据和堆栈等组成的,是一个能独立运行的活动实体. 进程的特征: 1.动态性:进程的实质是 ...

  9. hive的strict模式;where,group by,having,order by同时使用的执行顺序

    主要限制三种情况 (1) 有partition的表查询需要加上where子句,筛选部分数据实现分区裁剪,即不允许全表全分区扫描,防止数据过大 (2) order by 执行时只产生一个reduce,必 ...

  10. 创建银行分行的API

    DECLARE p_api_version NUMBER := 1.0; p_init_msg_list VARCHAR2(1) := 'F'; v_bank_id NUMBER := 530705; ...