android studio 自定义备注后续

上次说明了怎么定制自己的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里那样,检查到的问题能弹框提醒。好像不支持,研究中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容