작은 문제
이 질문에 대한 최상위 답변 을 따르면 하위 폴더를 얻을 수 있습니다.
그러나 프로젝트가 커지면 하위 폴더가 많이 생깁니다.
sourceSets {
main {
res.srcDirs =
[
'src/main/res/layouts/somethingA',
'src/main/res/layouts/somethingB',
'src/main/res/layouts/somethingC',
'src/main/res/layouts/somethingD',
'src/main/res/layouts/somethingE',
'src/main/res/layouts/somethingF',
'src/main/res/layouts/somethingG',
'src/main/res/layouts/somethingH',
'src/main/res/layouts/...many more',
'src/main/res'
]
}
}
큰 문제는 아니지만 :
- 목록이 너무 길어질수록 예쁘지 않습니다.
app/build.gradle
새 폴더를 추가 할 때마다 변경해야 합니다.
개량
그래서 모든 중첩 폴더를 가져 오는 간단한 Groovy 메소드를 작성했습니다.
def getLayoutList(path) {
File file = new File(path)
def throwAway = file.path.split("/")[0]
def newPath = file.path.substring(throwAway.length() + 1)
def array = file.list().collect {
"${newPath}/${it}"
}
array.push("src/main/res");
return array
}
이 방법을의 android {...}
블록 외부에 붙여 넣으십시오 app/build.gradle
.
사용하는 방법
이와 같은 구조의 경우 :
<project root>
├── app <---------- TAKE NOTE
├── build
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
다음과 같이 사용하십시오.
android {
sourceSets {
main {
res.srcDirs = getLayoutList("app/src/main/res/layouts/")
}
}
}
다음과 같은 구조가 있다면 :
<project root>
├── my_special_app_name <---------- TAKE NOTE
├── build
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
다음과 같이 사용하십시오.
android {
sourceSets {
main {
res.srcDirs = getLayoutList("my_special_app_name/src/main/res/layouts/")
}
}
}
설명
getLayoutList()
소요 a relative path
인수로. 는 relative path
프로젝트의 루트에 상대적입니다. 따라서 우리가 입력 "app/src/main/res/layouts/"
하면 모든 하위 폴더의 이름을 배열로 반환합니다.
[
'src/main/res/layouts/somethingA',
'src/main/res/layouts/somethingB',
'src/main/res/layouts/somethingC',
'src/main/res/layouts/somethingD',
'src/main/res/layouts/somethingE',
'src/main/res/layouts/somethingF',
'src/main/res/layouts/somethingG',
'src/main/res/layouts/somethingH',
'src/main/res/layouts/...many more',
'src/main/res'
]
이해를 돕기위한 주석이있는 스크립트는 다음과 같습니다.
def getLayoutList(path) {
// let's say path = "app/src/main/res/layouts/
File file = new File(path)
def throwAway = file.path.split("/")[0]
// throwAway = 'app'
def newPath = file.path.substring(throwAway.length() + 1) // +1 is for '/'
// newPath = src/main/res/layouts/
def array = file.list().collect {
// println "filename: ${it}" // uncomment for debugging
"${newPath}/${it}"
}
array.push("src/main/res");
// println "result: ${array}" // uncomment for debugging
return array
}
그것이 도움이되기를 바랍니다!