You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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. 清理并重新构建

执行以下操作清除缓存并重新构建:

  1. 运行命令:./gradlew clean(Windows系统用gradlew clean)
  2. 同步Gradle项目
  3. 重新构建工程

内容的提问来源于stack exchange,提问作者slaviboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:02:44