Kleines Problem
Es gelingt mir, Unterordner zu erreichen, indem ich der Top-Antwort auf diese Frage folge.
Es besteht jedoch darin, dass das Projekt wächst, viele Unterordner haben:
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/...viele mehr',
'src/main/res'
]
}
}
Nicht ein großes Problem, aber:
- Es ist nicht hübsch, da die Liste sehr lang wird.
- Sie müssen jedes Mal Ihr
app/build.gradle
ändern, wenn Sie einen neuen Ordner hinzufügen.
Verbesserung
Also schrieb ich eine einfache Groovy-Methode, um alle verschachtelten Ordner zu erfassen:
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
}
Fügen Sie diese Methode außerhalb des android {...}
-Blocks in Ihrem app/build.gradle
ein.
Wie man es benutzt
Für eine Struktur wie diese:
app <---------- BEACHTEN SIE
build
build.gradle
gradle
gradle.properties
gradlew
gradlew.bat
local.properties
settings.gradle
Verwenden Sie es so:
android {
sourceSets {
main {
res.srcDirs = getLayoutList("app/src/main/res/layouts/")
}
}
}
Wenn Sie eine Struktur wie diese haben:
my_special_app_name <---------- BEACHTEN SIE
build
build.gradle
gradle
gradle.properties
gradlew
gradlew.bat
local.properties
settings.gradle
Verwenden Sie es so:
android {
sourceSets {
main {
res.srcDirs = getLayoutList("my_special_app_name/src/main/res/layouts/")
}
}
}
Erklärung
getLayoutList()
nimmt einen relativen Pfad
als Argument. Der relative Pfad
ist relativ zum Root des Projekts. Wenn wir also "app/src/main/res/layouts/"
eingeben, werden alle Unterordnernamen als Array zurückgegeben, was genau das gleiche ist wie:
[
'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/...viele mehr',
'src/main/res'
]
Hier ist das Skript mit Kommentaren zur Verständlichkeit:
def getLayoutList(path) {
// nehmen wir an, 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 ist für '/'
// newPath = src/main/res/layouts/
def array = file.list().collect {
// println "Dateiname: ${it}" // zum Debuggen nicht kommentieren
"${newPath}/${it}"
}
array.push("src/main/res");
// println "Ergebnis: ${array}" // zum Debuggen nicht kommentieren
return array
}
Hoffentlich hilft es!
0 Stimmen
Gleich wie: stackoverflow.com/questions/2547100/…
0 Stimmen
Ich denke, dieser Link könnte Ihnen weiterhelfen. blog.mindorks.com/…