1. 前言
我们知道,Android Studio 默认是要我们把资源放在 res
目录下面的。
如果资源较少,那么把资源放在 res
下面是没有问题的。
但是,假如我们的资源非常多,还会没有问题吗?
每个分辨率的 drawable 目录下都有 300 张图片,如何快速地找到对应功能页面的图片吗?如何快速地把一个功能的代码及其资源迁移到一个新的项目中呢?
相信大家开发中也遇到过类似的困惑,接着看第二部分吧。
2. 正文
2.1 第一种解决方案
查看到 Android Studio 下对资源进行分包 这篇文章,方案如下:
第一步,新增了 res_core
和 res_sub
两个资源包;
第二步,在 app
模块的 build.gradle
文件中添加:
android {
...
sourceSets {
main {
res.srcDirs('src/main/res', 'src/main/res_core', 'src/main/res_sub')
}
}
}
这个方案实现了对资源进行分包处理,避免所有的资源都在一个目录下,不清晰的问题。
2.2 第一种解决方案的不足之处
但是,这种方案还是有点不尽如人意。项目中有很多模块时,就需要建立多个 res_xxx
的目录,如下图:
在 build.gradle
中需要添加:
android {
...
sourceSets {
main {
res.srcDirs('src/main/res', 'src/main/res_home','src/main/res_hot','src/main/res_ringtone',
'src/main/res_search','src/main/res_settings','src/main/res_video','src/main/res_videoedit')
}
}
}
不足的地方有:
- 现在想找
home
包对应的资源,不得不向下移动屏幕,找到red_home
; - 在
build.gradle
中添加的内容有些繁琐。
期望的是,属于哪个包的资源就和哪个包的代码放在一起。
2.3 第二种解决方案
属于哪个包的资源就和哪个包的代码放在一起,看效果图:
哪个包的资源就放在那个包下的 res
目录里面即可。
在 app
的 build.gradle
文件中配置:
def srcDirs = [
'com/example/approach2/ui/home',
'com/example/approach2/ui/hot',
'com/example/approach2/ui/ringtone',
'com/example/approach2/ui/search',
'com/example/approach2/ui/settings',
'com/example/approach2/ui/video',
'com/example/approach2/ui/videoedit',
]
android {
sourceSets {
main {
srcDirs.forEach {
main.res.srcDirs += 'src/main/java/' + it + '/res'
}
}
}
}
3. 最后
本文提供一种优化后的资源分包方案,希望能够帮助到大家。代码在这里。
文章评论