上次说明了怎么定制自己的tag,定制tag后可以去TODO功能栏里查看,查看备忘的锚点在哪
这里想说的是还有其他作用场景:协同办公,给tag提交上去了,打包上线又没注意,我丢
这篇文章呼应Xcode打包前自动代码检查
如何在编译打包的时候自动化检查忘记恢复的mark-tag备注呢,首先是想到gradle,比如install,assemble等,是不是可以搞个类似的。如check。
创建gradle任务
查看gradle中的task,那就加个类似的,比如叫checktask

image.png
于是自建一个check.gradle文件,后续专门定义添加各种check的task
import org.w3c.dom.Document
import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory
// 创建一个新的Gradle任务
task checkMarkTag(group: 'checktask', description: 'checkMarkTag') {
doLast {
def taskName = project.gradle.startParameter.taskNames[0]
// 获取当前构建变体
def currentVariant = project.android.applicationVariants.find { it
// it.name:SzjxRelease
// taskName:assembleSzjxRelease
taskName.contains(it.name)
}
// 如果找不到当前变体,则退出任务
if (currentVariant == null) {
return
}
// 获取当前构建类型的名称
def currentBuildType = currentVariant.buildType.name
// 如果是Debug模式,则退出任务
if (currentBuildType == 'debug') {
return
}
println("---------------开始checkMarkTag-----------------")
// 定义要搜索的标记 (看到了吧,MARK_TAG。自定义的tag)
def markTagPattern = /.*(?i)MARK_TAG.*/
// 获取所有 Java 文件
FileTree tree = fileTree(dir: 'src', includes: ['**/*.java', '**/*.kt', '**/*.xml'])
// 定义一个临时文件来存储包含标记的文件列表
List<File> markedFilesList = []
// 遍历文件并检查是否有 MARK_TAG
tree.each { File file ->
String content = file.text
if (content =~ markTagPattern) {
markedFilesList << file
}
}
if (!markedFilesList.isEmpty()) {
// 读取临时文件列表中的每个文件路径
markedFilesList.each { File file ->
// 读取文件并逐行检查
file.eachLine { String line, int lineNumber ->
// 检查当前行是否包含标记
if (line =~ markTagPattern) {
// 输出文件路径和行号
println "MARK_TAG found in: ${file.path}:${lineNumber}"
}
}
}
// 如果需要停止构建,可以抛出异常
throw new GradleException("MARK_TAG found")
}
println("---------------结束checkMarkTag-----------------")
}
}
然后就是把你定义的task添加到gradle任务目录中
// app主工程中:
apply from: '../../dependencies/check.gradle'
assemble.dependsOn checkUniConfig // 这是我另一个检查uni模块的,先不管
assemble.dependsOn checkMarkTag
到这,编译一下,gradle中就能看到了定义的checktask组了。双击checkMarkTag任务就能开始检查了
添加到打包流程中
上面可以直接双击checkMarkTag任务执行检查,但是可以省一步,加到打包或install流程中。因为android工程可能用到jenkins打包呢,所以,检查+打包放到一起
在app主工程gradle中,如下:
project.afterEvaluate {
tasks.findAll { task ->
task.group == 'checktask'
}.each { task ->
tasks.preBuild.dependsOn task
// tasks.assembleHnRelease.dependsOn task
// tasks.assembleSzRelease.dependsOn task
// tasks.assembleZxRelease.dependsOn task
}
// 下面的无关,是用来过滤权限的
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processResources.doFirst { pm ->
println("---------------开始过滤无用权限申请-----------------")
。。。
}
}
}
}
}
实际执行时机怎么定呢,实际调试打印gradle任务的时候,不管执行什么gradle task的时候,都会先执行preBuild任务,所以,就加到了preBuild之前。tasks.preBuild.dependsOn task
其他
其实在检测过程中如果检查到问题,现在只是抛异常,停掉任务,打印具体tag所在文件及行数,点击能直接定位到tag所在位置。但是想像Xcode里那样,检查到的问题能弹框提醒。好像不支持,研究中