如何在Gradle中使用Kotlin DSL配置多个字体资源文件夹?
解决Kotlin DSL中多字体资源文件夹的配置问题
你的核心问题是错误地将字体子目录设为独立的资源根目录,破坏了Android资源系统的识别规则,导致字体无法生成R.font.xxx引用。以下是具体的解决步骤:
1. 修正资源目录配置
Android要求字体资源必须归属于fonts资源类型目录下(即文件最终要被识别为res/fonts/下的资源)。你当前的配置把/src/main/res/fonts/ano和/src/main/res/fonts/roboto当成了独立的资源根目录,这会让Gradle将这些目录下的字体文件视为普通资源,而非font类型。
情况1:字体文件已在src/main/res/fonts/子目录中
这种情况下无需额外配置srcDirs,Android默认会扫描res/fonts/下的所有子目录。你只需要删除错误的多目录配置,保留主资源目录即可:
android.sourceSets.getByName("main") { res.srcDirs("src/main/res") }
情况2:字体文件在res/fonts/外部的独立目录
如果字体文件放在项目其他位置(比如src/main/fonts/ano、src/main/fonts/roboto),需要将这些目录映射到fonts资源类型:
android.sourceSets.getByName("main") { res { // 将外部字体目录映射到res/fonts下 srcDir("src/main/fonts/ano") { include("**/*.ttf", "**/*.otf") into("fonts") } srcDir("src/main/fonts/roboto") { include("**/*.ttf", "**/*.otf") into("fonts") } // 保留主资源目录 srcDir("src/main/res") } }
2. 验证字体文件名规则
确保字体文件名符合Android资源命名规范:
- 只能包含小写字母、数字、下划线
_和连字符- - 禁止大写字母、空格或特殊字符
例如:roboto_black.ttf是合法命名,RobotoBlack.ttf会导致无法生成R.font.roboto_black。
3. 清理并重新构建
执行以下操作清除缓存并重新构建:
- 运行命令:
./gradlew clean(Windows系统用gradlew clean) - 同步Gradle项目
- 重新构建工程
内容的提问来源于stack exchange,提问作者slaviboy
相关产品推荐
相关产品推荐

