感谢大神https://www.jianshu.com/p/fcc831e87b3d的思路。
引子
当项目越来越大,某些资源文件,比如layout,会十分臃肿。
就像这样。
你往下拖,还能拖好一会才见底。
所以,查了一下资源文件的分包方式。
试验成功,能够成功编译。
解决方案
OK,下面是详细配置步骤:
1)原先在res下面有一个layout文件,先改成layouts
2)在layouts下面创建自己的分包,比如你想把所有的fragment都放在一起,则,在layouts下面创建一个frag目录,然后!重点来了,在frag下,再创建一个layout目录。
3)把你的所有fragment的布局文件都拖到这里面layouts/frag/layout去吧
4)是时候动一动module的gradle文件了;打开 build.gradle,加上如下代码:
def listSubFile = {
def resFolder = 'src/main/res/layouts'
def files = file(resFolder).listFiles()
def folders = []
files.each {
item -> folders.add(item.absolutePath)
}
folders.add(file(resFolder).parentFile.absolutePath)
return folders
}
sourceSets {
main {
res.srcDirs = listSubFile()
}
}
稍微解释一下,这段代码放在android{}内部。
gradle文件内部都是用grovvy语言写的(网上很多grovvy资料,可查)
第一段的意思大概是,给listSubFile(它是一个数组)赋值,将src/main/res/layouts的子目录全部转换为绝对路径 然后加到数组中去。
第二段设置是资源文件的目录。
5)改过gradle之后最好是手动同步一下,
OK,按照这个思路,所有的布局文件xml都可以分包存放了。
缺陷
在AndroidStudio3.2.1之下,你有可能会看不到layouts下的分包文件!这是as本身的问题,你可以尝试按照下面的方式。。。。试试看。
另外:
这里其实还可以继续优化。虽然解决了目录臃肿的问题,但是,这是强制分包。。。也就是说。
你放在layouts下面的资源文件是不会被识别的,你必须把所有的layout xml放进子目录。
所以,gradle的这段配置其实还可以优化,有时间再自己研究吧。