Android同类型多资源文件夹的sourceSets配置方式是否正确?
问题1解答
这种通过sourceSets指定多资源目录的方式本身是Android Gradle插件官方支持的合法操作,但有两个注意点:
- 只要你没有把资源类型的父目录(比如直接把
src/main/res/mipmap作为srcDir同时下面还放了带限定符的子目录)加入配置,就不会违反官方的规范 - Gradle同步不报错不代表配置生效:Gradle默认会自动忽略不存在的
srcDir路径,不会触发同步失败。你可以在你配置的路径下放入测试资源,尝试在代码或者XML中引用对应R类的资源ID,能正常引用就说明配置生效。
问题2解答
不需要给所有资源类型都加配置,仅需要对你想要拆分多文件夹存放的资源类型做额外配置即可:
- 不需要拆分的资源类型,沿用系统默认的目录结构就可以,不用在
srcDirs里额外声明 - 如果要拆分比如layout为多个子文件夹,你需要把拆分后的每一个子文件夹的完整路径都加入
srcDirs列表,系统才会识别这些路径下的布局资源。
问题3解答
当前你对带限定符的mipmap的配置方式是错误的:
Android资源系统的命名规则要求,资源的限定符必须直接作为目录名的后缀,不能嵌套在资源类型目录下。比如你要拆分mipmap按业务分类,正确的目录结构应该是:
src/main/res/ mipmap-mdpi_home/ mipmap-mdpi_mine/ mipmap-hdpi_home/ mipmap-hdpi_mine/
之后把上述所有拆分后的目录都加入srcDirs列表即可,不能在默认的mipmap-mdpi等目录下嵌套子文件夹,资源系统无法识别这类嵌套路径下的资源。
补充报错解决
你遇到的drawable报错就是因为资源存放在了未被加入srcDirs的嵌套子目录中,或者子目录命名不符合资源命名规则导致系统无法识别。你可以按照上述的目录拆分规则调整drawable的目录结构,再把对应的路径加入srcDirs即可解决报错。
内容的提问来源于stack exchange,提问作者Kristian
相关产品推荐
相关产品推荐

