ছোট সমস্যা
আমি এই প্রশ্নের শীর্ষের উত্তর অনুসরণ করে সাবফোল্ডারগুলি অর্জন করতে সক্ষম হয়েছি ।
তবে, প্রকল্পটি বড় হওয়ার সাথে সাথে আপনার অনেকগুলি সাব-ফোল্ডার থাকবে:
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
}
আশা করি এটা সাহায্য করবে!