深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
闲言少叙,我们直接看源码,将所有不懂的地方全部讲解出来就可以了
// 解析1
task calculateSize() {
// 替换成要统计大小的图片名称
def name = "icon_name"
def fileSize = 0
// 解析2
def dir = rootDir.path
println "------start calculate-----"
println "dir:" + dir
// 解析3
fileTree(dir) {
// 解析4
include "**/" + name + ".*"
exclude "**/build/**"
}.each {
// 解析5
file ->
println file.path + " size is " + file.size()
fileSize += file.size()
}
if (fileSize > 1024) {
println fileSize / 1024 + "KB"
} else {
println fileSize + "B"
}
println "------end calculate-----"
}
解析1
这个大家应该都熟悉,我们Android中的gradle很多编译相关的都是通过task完成
解析2
dir就是我们要扫描文件的目录
- 此处通过rootDir.path获取到的是项目的根路径
- 其实我们这里还可以通过字符串传入固定路径或者获取制定的子模块路径也可以,说白了就是要扫描我们定义的路径下的所有文件然后通过比对找出符合条件的文件
解析3
- 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.path获取到文件的全路径
- 可以通过file.size()获取到文件的大小,单位为B
总结
当前脚本还是雏形,我们还可以通过此脚本来排查项目中的所有重复资源,不仅仅是名字相同,可以通过MD5来检测两个完全不同名字的图片到底是不是相同的图片;
写在最后
在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**