`

获取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);
             MediaApplication.logD(DownloadApk.class, "pkgParser:" + pkgParser.toString());
             // 这个是与显示有关的, 里面涉及到一些像素显示等等, 我们使用默认的情况
             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);
             MediaApplication.logD(DownloadApk.class, "size:"+info.length);
             MediaApplication.logD(DownloadApk.class, info[0].toCharsString());
             return info[0].toCharsString();
         } catch (Exception e) {
             e.printStackTrace();
         }
         return null;
     } 获取程序自身的签名:private String getSign(Context context) {
        PackageManager pm = context.getPackageManager();
        List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES);
        Iterator<PackageInfo> iter = apps.iterator();
        while(iter.hasNext()) {
             PackageInfo packageinfo = iter.next();
             String packageName = packageinfo.packageName;
             if (packageName.equals(instance.getPackageName())) {
                MediaApplication.logD(DownloadApk.class, packageinfo.signatures[0].toCharsString());
                return packageinfo.signatures[0].toCharsString();
             }
     }
        return null;
    } 对比2个方法的返回值来判断APK升级包的签名是否一致,一致就提示可以安装。
分享到:
评论

相关推荐

    获取apk签名的工具

    这个是一个获取apk文件签名的一个小工具,是我从我同事那弄来的分享给大家,请大家不要喷我哈。

    获取apk文件的详细信息

    获取android apk文件的基本信息,使用命令java -jar GetMorePackageInfo.jar qq.apk可以获取到qq.apk文件基本信息。

    获取apk签名1.2.apk

    )手机端获取安卓软件apk包的signature签名信息。包括发布者、拥有者、证书有效期、公钥、摘要(MD5)。纯手机端获取,无需电脑。程序员朋友的好帮手,截止目前(2020-04-11)没发现可在手机端获取签名信息的同类软件...

    万能apk签名工具(APK文件修改工具)V1.00 绿色版

    万能apk签名工具(APK文件修改工具)V1.00 绿色版 使用万能apk签名工具,自己定制个性的rom 就 轻而易举了!用的这个签名成功,然后将apk安装到了模拟器中。用的时候很简单,选择apk包,然后选择签名就可以。 运行它,...

    c#获取apk文件版本

    通过C#获取apk文件版本编号,通过版本编号更新APK文件。

    获取apk的签名信息、包名、版本号等

    做app版本升级的时候最容易出错的就是包名或者签名没对上,这个小工具能快速找出apk的签名信息,包名,版本号等问题,然后把这些信息复制出来对比,很方便。

    安卓apk签名修改工具

    用这个签名apk文件,然后将apk安装到了模拟器中。 用的时候很简单,选择apk包,然后选择签名就可以。 1.有了这个软件,可以自己修改美化APK文件 2.用WINRAR打开APK文件,将自己的图片图标放进替换原有的,然后用...

    apk签名工具文件

    apk签名文件,apk签名工具文件,可用于安卓APK文件的签名,不能用于ROM的签名

    apk文件签名工具

    给未签名的apk文件签名

    APK重新签名

    将原来APK的签名文件重新签名生成新的keystore文件,新生成的签名文件和密码要记住哦

    获取 APK 文件信息,包名

    电脑上运行此程序就可以了。获取当前 APK 文件信息。

    android10 apk签名文件

    android10 apk签名文件,签名后可以获取系统权限

    android实现给未签名的apk签名方法

    android给未签名的apk签名命令。 准备文件 1、unsign.apk(未签名的apk) 2、shanhy.keystore(签名证书文件) ...以上这篇android实现给未签名的apk签名方法就是小编分享给大家的全部内容了,希望能给大

    apk签名文件keystore制作生成工具

    因为在做安卓中文编程平台(ACP)的项目,用到了apk签名文件。这个签名工具目测和E4A相同界面哦。此源码已将-keypass 和-storepass 设置为相同密码。用到的模块:取DOS执行结果 取DOS执行结果.rar (2 KB, 下载次数:...

    微信工具apk签名获取

    接入微信开发时需要签名,这个apk是官方提供的获取签名工具, 微信工具 apk签名获取 接入微信开发时需要签名,这个apk是官方提供的获取签名工具, 微信工具 apk签名获取

    php获取apk信息包名应用名版本

    php获取apk基本信息 包名 应用名称 版本名称 支持屏幕 支持语言等 相关操作都在包里面

    APK万能签名工具

    apk文件万能签名工具:在网上下载的APK文件,修改资源后往往重新安装会报“签名错误,无法安装”,此工具可帮你解决任何签名问题。

    安卓APK签名获取

    需要JAVA环境 直接拖拽APK 或者改名的rar文件到面板 ,也可以直接选择文件

    查看apk的签名信息.zip

    查看apk的签名信息.zip 里面包含了查看apk签名信息的命令和简单示例 并且里面有apk的示例文件

    APK文件批量一键签名工具包

    主要针对需要系统签名或者是打包后APK出现没有签名的情况处理。 使用signapk.jar进行操作。可一键处理多个apk文件并另存。内有使用说明

Global site tag (gtag.js) - Google Analytics