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

React Native执行gradlew命令失败:compressDebugAssets任务因字体文件条目冲突报错

解决React Native Android构建失败:字体文件冲突与Java版本警告

一、核心问题:字体文件重复导致的compressDebugAssets失败

你遇到的字体文件冲突,几乎都是因为react-native-vector-icons库(或者依赖它的其他UI库)被重复引入,导致打包时assets/fonts目录下出现了相同的字体文件副本。下面是几种靠谱的解决思路:

1. 排查并统一依赖版本

  • 先打开项目根目录的package.json,搜索react-native-vector-icons,看看是不是不小心声明了多个版本,或者和其他依赖重复引入了这个库。如果有多余的条目,直接删除,只保留一个稳定版本,然后执行:
    npm install
    # 或者用yarn的话
    yarn install
    
  • 用依赖树命令查看重复来源:
    npm ls react-native-vector-icons
    # 或
    yarn list react-native-vector-icons
    
    如果发现某个第三方UI库(比如react-native-paper)内置了这个图标库,导致版本冲突,可以在package.json里添加resolutions强制统一版本:
    "resolutions": {
      "react-native-vector-icons": "^9.2.0" // 替换成你项目需要的版本
    }
    
    重新安装依赖后,冲突大概率会消失。

2. 清理手动添加的字体文件

如果你之前手动把字体文件复制到了android/app/src/main/assets/fonts目录,同时又通过react-native-vector-icons的自动链接功能引入了字体,就会造成重复。直接去这个目录删除手动添加的字体文件,只保留库自动生成的即可。

之后别忘了清理Gradle缓存:

cd android
./gradlew clean

再重新执行你的安装命令。

3. 让Gradle自动处理重复资源

如果上面的方法都没搞定,可以在android/app/build.gradle里添加配置,让Gradle遇到重复字体时自动选择第一个:

android {
    // 其他已有的配置...
    packagingOptions {
        pickFirst 'assets/fonts/*.ttf'
    }
}

这是个兜底方案,能快速解决冲突,但还是建议先排查依赖问题,从根源解决。


二、解决Java版本过时警告

警告source value 7 is obsolete是因为项目用了旧版Java(Java 7),现在Android构建推荐用Java 11及以上版本。修复步骤:

  1. 打开android/build.gradle,找到compileOptions块,修改成:
    android {
        // 其他配置...
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
        }
        // 如果你用了Kotlin,还要加上这个
        kotlinOptions {
            jvmTarget = '11'
        }
    }
    
  2. 检查本地Java版本:执行java -version,确保是Java 11或更高。如果不是,去OpenJDK或者Oracle官网下载安装即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:52:41