效果图

背景

统计安卓项目中的所有图片资源数量.

使用方法

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

将下边源码复制到跟路径下的build.gradle中

task calculateNum() {

def dir = rootDir.path

println "------start calculate 计算图片数量-----"

println "dir:" + dir

// Set set = new HashSet();

List set = new ArrayList<>();

fileTree(dir) {

include "**/**.png"

exclude "**/build/**"

}.each {

file ->

set.add(file.name)

}

println "nums:" + set.size()

println "------end calculate-----"

}

重新刷新gradle文件,即Sync Now即可

实现思路

本脚本实现思路较为简单,通过遍历项目中的所有png图片获取到所有图片,然后存储到集合中,统计集合的大小就可以统计出图片的数量,本脚本中通过list和set的切换实现对图片统计的不同诉求,如果只需要统计一共有多少种图片(即同名资源放在x,xx,xxx等文件下都算做是同一资源),使用set,如果需要统计全部的图片个数就直接使用list存储即可

// 解析1

task calculateNum() {

// 解析2

def dir = rootDir.path

println "------start calculate 计算图片数量-----"

println "dir:" + dir

// 解析3

// Set set = new HashSet();

List set = new ArrayList<>();

// 解析4

fileTree(dir) {

include "**/**.png"

exclude "**/build/**"

}.each {

// 解析6

file ->

set.add(file.name)

}

println "nums:" + set.size()

println "------end calculate-----"

}

解析1

这个大家应该都熟悉,我们Android中的gradle很多编译相关的都是通过task完成

解析2

dir就是我们要扫描文件的目录

此处通过rootDir.path获取到的是项目的根路径其实我们这里还可以通过字符串传入固定路径或者获取制定的子模块路径也可以,说白了就是要扫描我们定义的路径下的所有文件然后通过比对找出符合条件的文件

解析3

通过使用set排除重复图片(即图片分别放在x,xx,xxx等目录下)通过使用list统计所有项目中的图片,不排除同名在不同分辨率下的图片

解析4

fileTree是gradle中的一个语法,表示文件的树状结构后边的参数是我们要构成fileTree的根路径,后面可以写一个闭包(即{}中的内容)我们可以调用fileTree.each{}来遍历我们fileTree中的所有文件,如果我们在each之前添加了筛选闭包,此处会通过筛选条件过滤掉不符合的file,即此处是所有符合我们预期的文件

解析4

此处为fileTree的筛选闭包

源码中的筛选条件是找出除了build目录下的所有 */icon_name.*的文件

如drawable/icon_name.png,mipmap/icon_name.webp都是符合筛选条件的文件 我们可以通过 include 筛选符合条件的文件我们也可以通过 exclude 剔除不符合条件的文件

当然,上方的筛选条件都是非必选的,我们根据需要实现即可

筛选条件支持正则表达式

解析5

此处为fileTree中所有符合筛选条件的文件的遍历

file表示当前文件file.name表示不包含父目录的全名可以通过file.path获取到文件的全路径可以通过file.size()获取到文件的大小,单位为B

如当前的file存储全路径为./a/b/c/d.png file.name为 d.png file.path为./a/b/c/d.png

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: