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两个包文件对比的主要内容,如果未能解决你的问题,请参考以下文章