使用EAS构建Expo应用时,如何修复Guava ListenableFuture依赖冲突?
解决EAS构建Expo应用时react-native-usb-serialport的Guava依赖冲突问题
方法1:通过Expo配置注入Gradle依赖规则
在Expo项目的app.config.js或app.json中,利用android.gradleExtra字段直接注入Gradle配置,强制统一Guava版本或排除冲突模块:
export default { expo: { // 其他项目配置 android: { gradleExtra: ` configurations.all { resolutionStrategy { // 强制所有依赖使用指定版本的Guava,避免版本不一致导致的冲突 force 'com.google.guava:guava:27.1-android' // 或者排除重复的listenablefuture模块 // exclude group: 'com.google.guava', module: 'listenablefuture' } } ` } } };
提交配置后重新触发EAS构建即可,该方式无需修改第三方库源码,适配Expo/EAS的无本地Gradle文件场景。
方法2:修改fork库的依赖配置(优化版)
如果仍想使用自己fork的react-native-usb-serialport库,不要直接移除Guava依赖,而是在库的android/build.gradle中排除冲突的子模块:
dependencies { // 保留原Guava依赖,但排除冲突的listenablefuture模块 implementation('com.google.guava:guava:20.0') { exclude module: 'listenablefuture' } // 其他原有依赖... }
修改后重新发布fork的库到npm,在项目中安装该自定义版本即可解决依赖缺失和冲突问题。
方法3:用patch-package临时修复依赖
无需fork库,直接修改node_modules中的库配置并生成补丁,EAS构建时会自动应用:
- 安装依赖:
npm install patch-package --save-dev - 打开
node_modules/react-native-usb-serialport/android/build.gradle,添加方法2中的依赖排除配置 - 生成补丁:
npx patch-package react-native-usb-serialport - 将生成的
patches目录提交到Git仓库
后续EAS构建时会自动执行补丁,覆盖原库的Gradle配置。
内容的提问来源于stack exchange,提问作者AntPraxis
相关产品推荐
相关产品推荐

