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

Kotlin Compose添加OTF字体遇R未解析引用问题求助

Kotlin Compose 自定义OTF字体时"Unresolved reference: R"错误排查方案

针对你在添加OTF字体时遇到的R类引用错误,以下是逐一排查的解决步骤:

1. 验证字体文件的路径与命名

  • 确保字体文件放在**src/main/res/font/**目录下(注意是font单数,不是fonts)
  • 文件名必须符合Android资源命名规范:仅允许小写字母、数字、下划线,不能包含空格或特殊字符。需保证代码中R.font.xxx的名称和文件名完全一致(不含后缀)
  • 确认OTF文件本身未损坏,可尝试用系统字体预览工具打开验证

2. 检查模块Gradle配置

在模块级build.gradle.kts(或build.gradle)的android块中,确保资源目录配置正确:

android {
    sourceSets {
        main {
            res.srcDirs("src/main/res")
        }
    }
    // 其他现有配置...
}

同时确认使用的Android Gradle Plugin(AGP)为稳定版本(如8.0+),避免版本兼容问题

3. 修正R类导入逻辑

  • 删除手动添加的import dev.bluemethyst.apps.notix.R,Android Studio会自动根据当前模块的包名生成并导入正确的R类
  • 若当前代码的包名(dev.bluemethyst.apps.notix)与AndroidManifest.xml中声明的package属性一致,可直接使用R.font.xxx无需额外导入

4. 强制重新生成R类

  • 执行Gradle命令彻底清理重建:
    # macOS/Linux
    ./gradlew clean build
    # Windows
    gradlew.bat clean build
    
  • 或在Android Studio中执行:File -> Invalidate Caches... -> 勾选Invalidate and Restart
  • 极端情况可手动删除项目根目录下的.gradle文件夹和模块内的build文件夹,再重新同步项目

5. 确认项目结构合法性

  • 确保你的代码所在模块是Android应用模块(而非纯Kotlin/Java库模块),只有Android模块会自动生成R类
  • 检查AndroidManifest.xml中的package属性值是否与代码包名dev.bluemethyst.apps.notix完全一致

替代方案:直接加载字体文件

若上述方法仍无法解决,可尝试绕过R类直接加载字体:

val letteraMonoLLFont = FontFamily(
    Font(
        font = resources.openRawResource(R.raw.lettera_mono_ll_regular).readBytes(),
        weight = FontWeight.Normal
    ),
    Font(
        font = resources.openRawResource(R.raw.lettera_mono_ll_condlight_regular).readBytes(),
        weight = FontWeight.Bold
    )
)

注:此方法需将字体文件放在src/main/res/raw/目录下


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:41:03