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

http://www.jb51.net/article/79894.htm

1.获取APK的签名信息

方法一:

    private String showUninstallAPKSignatures(String apkPath) {String PATH_PackageParser = "android.content.pm.PackageParser";try {// apk包的文件路径// 这是一个Package 解释器, 是隐藏的// 构造函数的参数只有一个, apk文件的路径// PackageParser packageParser = new PackageParser(apkPath);Class pkgParserCls = Class.forName(PATH_PackageParser);Class[] typeArgs = new Class[1];typeArgs[0] = String.class;Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs);Object[] valueArgs = new Object[1];valueArgs[0] = apkPath;Object pkgParser = pkgParserCt.newInstance(valueArgs);// 这个是与显示有关的, 里面涉及到一些像素显示等等, 我们使用默认的情况DisplayMetrics metrics = new DisplayMetrics();metrics.setToDefaults();// PackageParser.Package mPkgInfo = packageParser.parsePackage(new// File(apkPath), apkPath,// metrics, 0);typeArgs = new Class[4];typeArgs[0] = File.class;typeArgs[1] = String.class;typeArgs[2] = DisplayMetrics.class;typeArgs[3] = Integer.TYPE;Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage",typeArgs);valueArgs = new Object[4];valueArgs[0] = new File(apkPath);valueArgs[1] = apkPath;valueArgs[2] = metrics;valueArgs[3] = PackageManager.GET_SIGNATURES;Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser, valueArgs);typeArgs = new Class[2];typeArgs[0] = pkgParserPkg.getClass();typeArgs[1] = Integer.TYPE;Method pkgParser_collectCertificatesMtd = pkgParserCls.getDeclaredMethod("collectCertificates",typeArgs);valueArgs = new Object[2];valueArgs[0] = pkgParserPkg;valueArgs[1] = PackageManager.GET_SIGNATURES;pkgParser_collectCertificatesMtd.invoke(pkgParser, valueArgs);// 应用程序信息包, 这个公开的, 不过有些函数, 变量没公开Field packageInfoFld = pkgParserPkg.getClass().getDeclaredField("mSignatures");Signature[] info = (Signature[]) packageInfoFld.get(pkgParserPkg);return info[0].toCharsString();} catch (Exception e) {e.printStackTrace();}return null;}

方法二:

 /** * 从APK中读取签名 * @param file * @return * @throws IOException */private static List<String> getSignaturesFromApk(File file) throws IOException { List<String> signatures=new ArrayList<String>(); JarFile jarFile=new JarFile(file); try { JarEntry je=jarFile.getJarEntry("AndroidManifest.xml"); byte[] readBuffer=new byte[8192]; Certificate[] certs=loadCertificates(jarFile, je, readBuffer); if(certs != null) { for(Certificate c: certs) { String sig=toCharsString(c.getEncoded()); signatures.add(sig); } } } catch(Exception ex) { } return signatures; } /** * 加载签名 * @param jarFile * @param je * @param readBuffer * @return */private static Certificate[] loadCertificates(JarFile jarFile, JarEntry je, byte[] readBuffer) { try { InputStream is=jarFile.getInputStream(je); while(is.read(readBuffer, 0, readBuffer.length) != -1) { } is.close(); return je != null ? je.getCertificates() : null; } catch(IOException e) { } return null; } /** * 将签名转成转成可见字符串 * @param sigBytes * @return */private static String toCharsString(byte[] sigBytes) { byte[] sig=sigBytes; final int N=sig.length; final int N2=N * 2; char[] text=new char[N2]; for(int j=0; j < N; j++) { byte v=sig[j]; int d=(v >> 4) & 0xf; text[j * 2]=(char)(d >= 10 ? ('a' + d - 10) : ('0' + d)); d=v & 0xf; text[j * 2 + 1]=(char)(d >= 10 ? ('a' + d - 10) : ('0' + d)); } return new String(text); } 

说明:方法一不管用的话,可以用方法二。

android获取未安装APK签名信息及MD5指纹相关推荐

  1. Android如何打开未安装的apk,android获取未安装的APK文件的信息

    下面从一个未安装的android的apk文件获取apk信息 /** * 获取未安装的apk信息 * * @param ctx Context * @param apkPath apk路径,可以放在SD ...

  2. 获取SD卡上 未安装 APK文件信息

    1./** 2. * 获取未安装的apk信息 3. * 4. * @param ctx 5. * @param apkPath 6. * @return 7. */ 8. public static ...

  3. Android 获取用户安装的app信息

    在电子市场类软件中,管理应用程序要获取已经安装的应用程序列表,下面提供两种方法,参考了 http://www.cnblogs.com/mengshu-lbq/archive/2010/09/09/18 ...

  4. Android开发之动态加载,运行未安装apk

    Android运行未安装apk可以使用Android的DexClassLoader类 这个也可以再Android的官方文档中看到 A class loader that loads classes f ...

  5. 获取apk签名信息、抹除apk签名状态、重新签名apk

    Android应用市场一般都要求apk先进行签名才可上传应用,基于安全原则很多平台加入了apk需加固后才能上传的规则: 这时候就面临一个问题,因为apk加固后,会被抹除原有的签名信息,有些平台提供了官 ...

  6. android 读取U盘apk文件信息,拔掉U盘导致进程被杀

    最近一直在搞appStore,之前一直都是从网络获取apk下载进行安装,现在车机要求需要支持从U 盘安装apk,本以为简单很容易的事,却一不小心掉了一个坑里,爬了好久,主要是没很明显的报错,没遇到过的 ...

  7. 如何在Android模拟器中安装APK文件?

    我终于设法混淆了我的Android应用程序,现在我想通过安装APK文件并在模拟器上运行来测试它. 如何在Android模拟器上安装APK文件? #1楼 从浏览器下载apk文件,然后点击它(通知区域). ...

  8. php给apk包签名,Android_查看apk签名信息方法,用shell写了一个查看apk签名的 - phpStudy...

    查看apk签名信息方法 用shell写了一个查看apk签名的脚本.代码很少也很简单 #!/bin/bash mkdir .temp_for_certificate cd .temp_for_certi ...

  9. android获取手机和系统版本等信息的代码,Android获取手机的版本号等信息的代码...

    本文实例分享了Android获取手机系统版本等信息的方法,供大家参考,具体内容如下: 第一种代码: String phoneInfo = "Product: " + android ...

最新文章

  1. centos 6.8 php mysql_Centos 6.8编译安装LNMP环境(Nginx+MySQL+PHP)教程
  2. java中 hashmap中小数,java基础知识--HashMap中对 h(length-1)的理解
  3. git 常用的撤销操作
  4. moel vue 自定义v_vue在自定义组件中使用v-model的方法
  5. 阿里云96页报告详解《云上转型》(10个案例、10大趋势/完整版PPT)
  6. 查询一个月一来表空间的变化情况
  7. 「leetcode」450. 删除二叉搜索树中的节点:【递归】【迭代】详解
  8. python如何检验显著性差异_Python中如何计算Pearson相关性和显著性?
  9. 2021最新域名授权系统网站源码 全新一键安装源码+卡密自助授权+全新UI界面
  10. gofpdf 学习笔记
  11. 计算机读不了硬盘分区,修复移动硬盘分区故障和无法识别计算机
  12. SpringBoot整合RabbitMQ之整合配置篇
  13. 一个好的学习算法的网站
  14. Ubuntu14.04网易云音乐的下载及安装 ssh安装 卸载 安装输入法
  15. 侍魂哪个服务器人最多,经典街机游戏《侍魂》里帅气的人物,你最喜欢哪个?...
  16. html5 语音输入小话筒,HTML5语音输入方法
  17. Tomcat部署步骤
  18. journald.conf 中文手册
  19. java 反射invoke_对于反射中的invoke()方法的理解
  20. new指针后,地址相同

热门文章

  1. 二、应用层协议概述与HTTP
  2. 3D打印机分类与速度
  3. 苹果笔记本电脑 javaee安装_苹果下周举行发布会 重磅推出新款MacBook Air和MacBook Pro...
  4. php7 windows2008,【笔记】Windows Server2008 R2 安装 PHP7 缺少 API-ms-win-crt-runtime-l1-1-0.dll 解决方案...
  5. mysql命令程序_MySQL命令大全经典版
  6. mysql数据类型符号位_MySQL数据类型
  7. sizebox模型下载_css 盒模型、box-sizing 学习笔记
  8. PHPExcel开发者文档[中文版]
  9. Xilinx ISE 调用 ModelSim SE 库编译
  10. .NET Core Generic Host项目使用Topshelf部署为Windows服务