android获取APK签名信息及MD5指纹
2014-02-24 09:11
459 查看
1.获取APK的签名信息
获取程序自身的签名:
对比2个方法的返回值来判断APK升级包的签名是否一致,一致就提示可以安装。
2.获取指定已安装完整签名信息,包括MD5指纹:
3.如何查看指定证书的指纹
http://www.g78.net/android-apk-signatures
01 | private String showUninstallAPKSignatures(StringapkPath){ |
02 | String PATH_PackageParser= "android.content.pm.PackageParser" ; |
03 | try { |
04 | // apk包的文件路径 |
05 | // 这是一个Package解释器,是隐藏的 |
06 | // 构造函数的参数只有一个,apk文件的路径 |
07 | // PackageParserpackageParser=newPackageParser(apkPath); |
08 | Class pkgParserCls=Class.forName(PATH_PackageParser); |
09 | Class[] typeArgs= new Class[ 1 ]; |
10 | typeArgs[ 0 ] =String. class ; |
11 | Constructor pkgParserCt=pkgParserCls.getConstructor(typeArgs); |
12 | Object[] valueArgs= new Object[ 1 ]; |
13 | valueArgs[ 0 ] =apkPath; |
14 | Object pkgParser=pkgParserCt.newInstance(valueArgs); |
15 | MediaApplication.logD(DownloadApk. class , "pkgParser:" + pkgParser.toString()); |
16 | // |
17 | DisplayMetrics metrics= new DisplayMetrics(); |
18 | metrics.setToDefaults(); |
19 | // PackageParser.PackagemPkgInfo=packageParser.parsePackage(new |
20 | // |
21 | // |
22 | typeArgs = new Class[ 4 ]; |
23 | typeArgs[ 0 ] =File. class ; |
24 | typeArgs[ 1 ] =String. class ; |
25 | typeArgs[ 2 ] =DisplayMetrics. class ; |
26 | typeArgs[ 3 ] =Integer.TYPE; |
27 | Method pkgParser_parsePackageMtd=pkgParserCls.getDeclaredMethod( "parsePackage" , |
28 | typeArgs); |
29 | valueArgs = new Object[ 4 ]; |
30 | valueArgs[ 0 ] = new File(apkPath); |
31 | valueArgs[ 1 ] =apkPath; |
32 | valueArgs[ 2 ] =metrics; |
33 | valueArgs[ 3 ] =PackageManager.GET_SIGNATURES; |
34 | Object |
35 |
36 | typeArgs = new Class[ 2 ]; |
37 | typeArgs[ 0 ] =pkgParserPkg.getClass(); |
38 | typeArgs[ 1 ] =Integer.TYPE; |
39 | Method pkgParser_collectCertificatesMtd=pkgParserCls.getDeclaredMethod( "collectCertificates" , |
40 | typeArgs); |
41 | valueArgs = new Object[ 2 ]; |
42 | valueArgs[ 0 ] =pkgParserPkg; |
43 | valueArgs[ 1 ] =PackageManager.GET_SIGNATURES; |
44 | pkgParser_collectCertificatesMtd.invoke(pkgParser, valueArgs); |
45 | // |
46 | Field packageInfoFld=pkgParserPkg.getClass().getDeclaredField( "mSignatures" ); |
47 | Signature[] info=(Signature[])packageInfoFld.get(pkgParserPkg); |
48 | MediaApplication.logD(DownloadApk. class , "size:" +info.length); |
49 | MediaApplication.logD(DownloadApk. class , info[ 0 ].toCharsString()); |
50 | return info[ 0 ].toCharsString(); |
51 | } catch (Exception e){ |
52 | e.printStackTrace(); |
53 | } |
54 | return null ; |
55 | } |
01 | private String getSign(Contextcontext){ |
02 | PackageManager pm=context.getPackageManager(); |
03 | List<PackageInfo> apps=pm.getInstalledPackages(PackageManager.GET_SIGNATURES); |
04 | Iterator<PackageInfo> iter=apps.iterator(); |
05 | while (iter.hasNext()) { |
06 | PackageInfo packageinfo=iter.next(); |
07 | String packageName=packageinfo.packageName; |
08 | if (packageName.equals(instance.getPackageName())) { |
09 | MediaApplication.logD(DownloadApk. class , packageinfo.signatures[ 0 ].toCharsString()); |
10 | return packageinfo.signatures[ 0 ].toCharsString(); |
11 | } |
12 | } |
13 | return null ; |
14 | } |
2.获取指定已安装完整签名信息,包括MD5指纹:
01 | public void getSingInfo() { |
02 | try { |
03 | PackageInfo "com.sina,weibo" , PackageManager.GET_SIGNATURES); |
04 | Signature[] |
05 | Signature 0 ]; |
06 | parseSignature(sign.toByteArray()); |
07 | } catch (Exception e){ |
08 | e.printStackTrace(); |
09 | } |
10 | } |
11 | public void parseSignature( byte [] |
12 | try { |
13 | CertificateFactory "X.509" ); |
14 | X509Certificate new ByteArrayInputStream(signature)); |
15 | String |
16 | String |
17 | System.out.println( "signName:" + cert.getSigAlgName()); |
18 | System.out.println( "pubKey:" + pubKey); |
19 | System.out.println( "signNumber:" + signNumber); |
20 | System.out.println( "subjectDN:" +cert.getSubjectDN().toString()); |
21 | } catch (CertificateException |
22 | e.printStackTrace(); |
23 | } |
24 | } |
1 | D:>keytool alias 在导出时程序的别名(- alias 这个命令,好像不用也行,没有试,反正我一直都在使用) |
2 |
3 | 出的结果为: |
4 |
5 | 在导出时程序的别名, |
6 |
7 | 认证指纹 |
相关文章推荐
- Android 获取 APK 签名信息及 MD5 指纹
- Android进阶之获取APK签名信息及MD5指纹
- android获取APK签名信息及MD5指纹
- android获取未安装APK签名信息及MD5指纹
- android获取APK签名信息及MD5指纹
- android获取APK签名信息及MD5指纹
- Android:获取APK签名信息
- 获取android应用签名证书(打包APK用到的那个文件)的SHA1,MD5,SHA256值
- Android:获取APK签名信息 .
- Android 获取自己程序APK包的MD5指纹
- Android Studio apk打包以及获取apk签名信息
- [.bat][保存以防后面有用哦]获取APK签名信息 , 获取 Android 应用的 Apk 签名
- APK_获取Android的APK包签名信息
- Android 开发技巧 - 获取apk签名信息的方法
- 获取android应用签名证书(打包APK用到的那个文件)的SHA1,MD5,SHA256值
- Android 获取某apk的签名信息,可用作防盗版进入。
- 获取android应用签名证书(打包APK用到的那个文件)的SHA1,MD5,SHA256值
- Android获取apk签名指纹的md5值(防止重新被打包)的实现方法
- 获取android应用或apk的md5指纹方法
- Android获取apk签名信息