/**
* 判断某个文件或者文件夹是否是module
* @param f
* @return
*/
boolean isModuleDir(File f) {
boolean isModule = false
if (f.isDirectory()) {
def gradleFile = false
def hasDir = false
def settingsFile = false
f.listFiles().each {
if (it.name.equals("build.gradle") && it.isFile()) {
gradleFile = true
}
if (it.name.equals("settings.gradle") && it.isFile()) {
settingsFile = true
}
if (it.isDirectory()) {
hasDir = true
}
}
//1.必须有一个文件夹
// 2.有build.gradle文件,才算完整
// 3.如果有settings.gradle 则是一个项目的文件夹,不应该作为module
isModule = hasDir && gradleFile && !settingsFile
}
return isModule
}
/**
* 判断某个文件或者文件夹是否是项目
* @param f
* @return
*/
boolean isProjectDir(File f) {
boolean aPojecet = false
if (f.isDirectory()) {
def gradleFile = false
def hasDir = false
def settingsFile = false
//必须有一个文件夹,且有gradle 文件,才算完整,如果有settings.gradle 则是一个完整项目的文件夹,不应该作为module 打开
f.listFiles().each {
if (it.name.equals("build.gradle") && it.isFile()) {
gradleFile = true
}
if (it.name.equals("settings.gradle") && it.isFile()) {
settingsFile = true
}
if (it.isDirectory()) {
hasDir = true
}
}
//1.必须有一个文件夹
// 2.有build.gradle文件,才算完整
// 3.如果有settings.gradle 则是一个项目的文件夹
aPojecet = hasDir && gradleFile && settingsFile
}
return aPojecet
}
/**
* 引入某个文件夹的全部模块,包括子文件夹
* @param dir
*/
void includeAllModule(File dir) {
println "----include $dir all module------"
dir.listFiles().each() {
if (isModuleDir(it)) {
println("include module:" + it.name)
include ":${it.name}"//app 交互过程中定义的标准key等 :ExternalPlugin以及 plugin-host需要使用
project(":${it.name}").projectDir = it
} else {
if (it.isDirectory() && it.listFiles().size() > 0) {
includeAllModule(it)
}
}
}
}
/**
* 删除文件夹所有项目构建产生的缓存
* @param dir
*/
def deleteProjectBuildCache(dir) {
if (dir.isDirectory()) {
if (isProjectDir(dir)) {
println "-------项目$dir------"
//项目目录要删除的文件,.svn文件夹根据自己实际需求配置是否要删除
def deleteFileNames = [".gradle", ".idea", "build", "gradlew", "gradlew.bat", ".svn"]
deleteFileNames.forEach {
def gFile = new File(dir, it)
if (gFile.exists()) {
try {
if (!delete(gFile)) {
println "删除失败:" + gFile
} else {
println "删除:" + gFile
}
} catch (a) {
println "删除异常:" + a.message
}
}
}
}
if (isModuleDir(dir)) {
println("\t*模块:" + dir.name)
def buildFile = new File(dir, "build")
if (buildFile.exists() && buildFile.isDirectory()) {
try {
if (!delete(buildFile)) {
println "删除失败:" + buildFile
} else {
println "删除:" + buildFile
}
} catch (a) {
println "删除异常:" + a.message
}
}
} else {
dir.listFiles().each {
deleteProjectBuildCache(it)
}
}
}
}
/**
* 删除文件夹项目构建缓存任务
*/
task("deleteDirProjecetBuildChache") {
doFirst {
def hostlibDir = file("G:\\MyCode\\Flutter")
deleteProjectBuildCache(hostlibDir)
}
}