「Android实用脚本」根据MD5值统计项目中冗余资源

这篇博客介绍了一种通过计算资源的MD5值来检测Android项目中冗余图片的方法。将特定代码添加到build.gradle文件中,任务会遍历所有.png文件,计算它们的MD5哈希,然后将相同MD5值的资源记录到.md5.txt文件中,从而帮助开发者定位和优化项目中的冗余资源。这种方法仅适用于本地使用,避免影响编译时间。
摘要由CSDN通过智能技术生成

背景

进行包体积优化手动对比图片工作量大,切耗时长,可以通过资源的md5值进行区分,统计处冗余资源.

使用方法

注! 只适用于本地使用,千万不要上传到git上,因为写在了build.gradle中会对编译时间有影响

  1. 将下边源码复制到跟路径下的build.gradle中
task calculateMd5() {
    def dirPath = rootDir.path
    def HEX_DIGITS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9','A', 'B', 'C', 'D', 'E', 'F' ] as char[];
    println "------start calculate 根据md5检测冗余图片-----"
    println "dir:" + dirPath
	// 解析1
    Map<String, String> map = new HashMap<>();
    fileTree(dirPath) {
        include "**/**.png"
        exclude "**/build/**"
    }.each {
        file ->
			// 解析2
            InputStream is = new FileInputStream(file)
            MessageDigest md = MessageDigest.getInstance("MD5")
            byte[] buffer = new byte[1024]
            int numRead = -1
            while((numRead=is.read(buffer)) > 0) {
                md.update(buffer,0,numRead);

            }
            is.close()
			// 解析3
            StringBuilder sb = new StringBuilder(md.digest().length * 2);
            for (int i = 0; i < buffer.length; i++) {
                sb.append(HEX_DIGITS[(buffer[i] & 0xf0) >>> 4]);
                sb.append(HEX_DIGITS[buffer[i] & 0x0f]);

            }
            def key = sb.toString()
            if(map.get(key) == null) {
                map.put(key, "")
            }
			// 解析4
            map.put(key, map.get(key)  + file.name+ "\n    ")
    }
//    println "nums:" + set.size()

	// 解析5
    new File("./md5.txt").withWriter("UTF-8") { writer ->


            def iterator = map.entrySet().iterator()

            while (iterator.hasNext()) {
                def cur = iterator.next()
                writer.write(cur.key.substring(0, 32) + ": " + cur.value+ "\n    ")
            }
    }
    println "------end calculate-----"
}
  1. 重新刷新gradle文件,即Sync Now即可

实现思路

实现思路就是首先获取资源的md5值,然后通过hashmap进行分类,找出md5一样(即冗余)的资源记录,最后将按照md5分类的数据输出到文档中

解析1

该HashMap,key为md5值,value为当前资源的名字,用于分类相同资源

解析2

逐个资源转换成输入流,通过MessageDigest转换成Md5 buffer流

解析3

buffer 逐个字节转换成16进制字符串

解析4

将解析3中转换的16进制字符串和当前资源名称一起存储到map中,借助hashmap特性,将所有md5值相同的资源存储到同一个字符串中

解析5

遍历map,并截取32位md5值,将md5和资源名称写入到文件中

总结

当前文件会输出所有资源,对于非荣誉资源并没有删除,所以看着不是很直观,后续可以只输出冗余资源,方便直接处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值