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 - 用依赖树命令查看重复来源:
如果发现某个第三方UI库(比如npm ls react-native-vector-icons # 或 yarn list react-native-vector-iconsreact-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及以上版本。修复步骤:
- 打开
android/build.gradle,找到compileOptions块,修改成:android { // 其他配置... compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } // 如果你用了Kotlin,还要加上这个 kotlinOptions { jvmTarget = '11' } } - 检查本地Java版本:执行
java -version,确保是Java 11或更高。如果不是,去OpenJDK或者Oracle官网下载安装即可。
内容的提问来源于stack exchange,提问作者Daniyar Sarsenov
相关产品推荐
相关产品推荐

