在开发android项目的时候,经常同一个目录下会挂载很多的子模块,而我们又需要settings.gradle
里面进行配置
include(':app')
当模块特别多的时候,写起来就会很麻烦,那么简单的注册方法我用kotlin脚本写了一个,提供大家使用
脚本名称: 使用settings.gradle.kts
代替原来的settings.gradle
// 项目名称
rootProject.name = "Arto"
autoRegisterModule()
fun autoRegisterModule() {
// 当前项目目录下的子目录
val dirs = settingsDir.listFiles() ?: return
// 使用这两个文件作为判断是不是子模块的依据
val moduleFlags = arrayListOf("build.gradle", "build.gradle.kts")
// 忽略的目录,如果有其他你暂时不需要注册的目录,也可以放进来
val ignoreDirs = arrayListOf(
".gradle",
".idea",
"gradle"
)
// 遍历子目录
dirs.filter { file -> file.isDirectory && !ignoreDirs.contains(file.name) }
.forEach { dir ->
// 查找有没有文件是 build.gradle 或 build.gradle.kts 的文件
val isModule = (dir.listFiles() ?: return@forEach)
.any { file -> !file.isDirectory && moduleFlags.contains(file.name) }
if (isModule) {
// 如果有,则把这个模块注册进来
val moduleName = dir.name
println("注册模块:$moduleName")
include(":$moduleName")
}
}
}
代码非常简单,如果有需要引入外部目录作为模块的,那个还是按以前的方法吧;这里一并记录下引入外部目录作为模块的两种方式,同样,使用kotlin脚本,因为也是在settings.gradle.kts
中注册的
// 需要引入的外部模块名称
include(":xx")
// 方式一:相对目录
project(":xx").projectDir = File(settingsDir,"与当前目录的相对路径")
// 方式二:使用绝对路径
project(":xx").projectDir = File("模块目录的绝对路径")
补充:2021-05-31
朋友反馈说对kotlin不熟悉,希望提供个groovy版本的,下面放出groovy版本
注:settings.gradle
与 settings.gradle.kts
保留一个即可
settings.gradle
rootProject.name = "Arto"
autoRegisterModule()
// 自动注册当前所有子目录下的模块
def autoRegisterModule() {
def moduleSymbol = ["build.gradle", "build.gradle.kts"]
// 忽略的目录,如果有不想自动注册的目录也可以放进来
def ignoreDirs = [
".gradle",
".idea",
".git",
"build"
]
settingsDir.eachDir { file ->
if (ignoreDirs.contains(file.getName())) return
file.eachFile { f ->
if (!f.isDirectory() && moduleSymbol.contains(f.getName())) {
def modelName = file.getName()
// 是模块,可以注册
println "注册模块:$modelName"
include(":$modelName")
}
}
}
}
同样外部模块引用代码
// 方式一:相对目录
project(":xx").projectDir = new File(settingsDir,"与当前目录的相对路径")
// 方式二:使用绝对路径
project(":xx").projectDir = new File("模块目录的绝对路径")
打完收工!
网友评论