1. 程式人生 > >Grade 自定義 Task 實現 修復 java.io.IOException: Could not delet folder "xxx"

Grade 自定義 Task 實現 修復 java.io.IOException: Could not delet folder "xxx"

之前釋出過一篇文章 :Gradlep構建 出現 java.io.IOException: Could not delet folder “xxx”,這裡邊講的是 將報錯檔案刪除就好,
後來總是遇到該問題,我就在想要不要弄成一鍵刪除的方式。於是想改用什麼方式實現自動刪除檔案
首先想到了Python指令碼 ,後來覺得AndroidStudio 中新增這個東西顯得不倫不類,後來想用Java 寫到測試單元中,emmm…可這樣顯得不夠逼格。於是gradle task 閃亮登場

具體步驟如下:

task delTask <<{
具體想法如下
	1.首先在專案下新建檔案del.file,將報錯資訊複製到檔案中
	2.讀取del.file本地檔案內容
	3.匹配到出錯的內容,擷取檔案所在全路徑
	4.執行資料夾刪除操作
}

具體程式碼實現如下

task delTask{
        doLast{
            //讀取檔案,並裝進List。
            def list = []
            new File('del.file').withReader('UTF-8') { reader ->
                reader.eachLine {
                    if (it.contains(">")) {
                        def pre = it.indexOf("'") +1
                        def aft = it.lastIndexOf("'")
                        list.add(it.substring(pre , aft))
                    }
                }
                File fileDel = new File(list.get(0))
                println(">>>>>> 要刪除的資料夾路徑:"+fileDel.getAbsolutePath())
                def isDel = fileDel.deleteDir()
                println(">>>>>> 資料夾是否刪除:"+isDel)
            }
        }
    }

將以上程式碼放到build.gradle 中,執行構建

在這裡插入圖片描述

最後 ,執行gradle delTask 完美刪除,不用再去資料夾中尋找檔案了
在這裡插入圖片描述

最最後 你可能不喜歡 執行完 delTask 在切換執行 installDebug 或者是 其他Task ,那好辦

 afterEvaluate {
        tasks.matching {
            it.name.contains("preBuild")//preBuild 是程式的 build 的最最開始,你把delTask 載入這兒,每次執行都將會先執行 delTask
        }.each { task ->
            task.dependsOn(rootProject.tasks.delTask)  // 任務依賴:執行task之前需要執行dependsOn指定的任務
        }

    }