APK两个包文件对比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APK两个包文件对比相关的知识,希望对你有一定的参考价值。

参考技术A 功能:同一个应用包的两个不同版本文件大小对比
1、获取apk大小等基本信息
2、遍历文件夹,分别展示新增文件、体积增加文件、删除文件、体积减小文件列表木块
3、支持.jar包文件比对
4、前端页面包含:上传文件页面、任务列表页、结果详情页

如何安装androguard

对比两个压缩包内文件,将不同的文件及文件夹单独移到一个新文件夹里

项目需要,要对比两个apk,看是否有新增文件,并列出。

个人写这个写了有段时间,如果不跟业务结合的话可能就不会写这么久了(感慨下,还是单纯的逻辑代码简单啊!)

上代码

private String testFile(String path1,String unzipPath1,String path2,String unzipPath2,String newUnzipPath) throws Exception{
    long l = System.currentTimeMillis();
    //将压缩包分别解压
    ZipUtils.unZip(path1, unzipPath1);
    ZipUtils.unZip(path2, unzipPath2);
    File f1 = new File(unzipPath1);
    File f2 = new File(unzipPath2);
    File newF=new File(newUnzipPath);
    newF.mkdirs();
    //获取解压后路径下的全部文件及文件夹
    Set<String> fileList1 = getAllFile(f1, unzipPath1);
    Set<String> fileList2 = getAllFile(f2, unzipPath2);
    Set<String> newfilelist = new HashSet<>();
    for (String p : fileList2) {
      if (fileList1.add(p)) {
        newfilelist.add(p);
      }
    }
    //不同文件及文件夹复制
    for (String p : newfilelist) {
      String oldp=unzipPath2+p;
      p = newUnzipPath + p;
      File file = new File(p);
      file.getParentFile().mkdirs();
      file.createNewFile();
      FileUtils.copyFile(new File(oldp),file);
    }
    long l2 = System.currentTimeMillis();
    System.out.println("文件对比耗时(秒):"+(l2 - l) / 1000);
    if (newfilelist.size() > 0) {
      return newUnzipPath;
    } else {
      return null;
    }
  }

  private static Set<String> getAllFile(File f,String rootPath){
    Set<String> filseList=new HashSet<>();
    File[] files=f.listFiles();
    for(int i=0;i<files.length;i++){
      File ff=files[i];
      if(ff.isDirectory()){
        filseList.addAll(getAllFile(ff,rootPath));
      }else{
        filseList.add(ff.getAbsolutePath().replace(rootPath,""));
      }
    }
    return filseList;
  }

path1:压缩包1所在路径

unzipPath1:压缩包1要解压到的路径

paht2:压缩包2所在路径

unzipPath2:压缩包2要解压到的路径

newzipPath:不同文件及文件夹存放路径

该方法对比的是压缩包2相对于压缩包1不同的文件,在我的项目中主要是用来对比新版本的apk相对于旧版本的apk有什么新增的文件。(当时在网上找了找,发现并没有现成的轮子可以用,所以我就把我造好的轮子发出来供大家使用,批判。水平有限,有可以优化改进的地方,欢迎大家畅所欲言)

以上是关于APK两个包文件对比的主要内容,如果未能解决你的问题,请参考以下文章

两个运维人员备份war包对比

MPchartAnadroid的对比柱状图

Beyond Compare怎样设置自动对比文件内容

快速对比两个文件的差异

快速对比两个文件的差异

两个html文本文件,想对比这两个文件有啥不一样的地方。