छोटी सी समस्या
मैं इस प्रश्न के शीर्ष उत्तर का पालन करके सबफ़ोल्डर्स प्राप्त करने में सक्षम हूं ।
हालाँकि, जैसे-जैसे परियोजना बड़ी होती जाती है, आपके पास कई उप-फ़ोल्डर होंगे:
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
हर बार नया फ़ोल्डर जोड़ने के लिए बदलना होगा ।
सुधार की
इसलिए मैंने सभी नेस्टेड फ़ोल्डरों को हथियाने के लिए एक सरल ग्रूवी विधि लिखी:
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
}
आशा है ये मदद करेगा!