React Native EAS构建Android APK失败:依赖变体匹配错误
解决EAS Build Android时Gradle依赖变体匹配失败问题
问题场景
使用eas build -p android --profile preview构建React Native Android APK时,Gradle报错无法解析react-native-async-storage_async-storage、react-native-gesture-handler等多个依赖的变体,提示找不到匹配的编译时库变体。但本地用npx expo run:android生成的开发包可正常运行。
核心原因
- Gradle插件(AGP)版本动态获取导致云构建与本地环境版本不一致,依赖变体的属性(如
AgpVersionAttr、BuildTypeAttr)不匹配 - 第三方React Native依赖的Release构建变体未正确配置,Gradle无法识别
- 预构建的Expo模块与纯React Native模块的配置冲突
解决方案
1. 固定Gradle插件(AGP)版本
修改android/build.gradle的buildscript依赖块,明确指定AGP版本(与EAS构建使用的8.6.0匹配):
buildscript { // ... 其他ext配置 dependencies { // 替换原动态获取的AGP版本为固定值 classpath('com.android.tools.build:gradle:8.6.0') classpath('com.facebook.react:react-native-gradle-plugin') classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') } }
同时确认android/gradle/wrapper/gradle-wrapper.properties中的Gradle版本为8.10.2(与日志中的版本一致):
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
2. 添加依赖变体兼容规则
在android/app/build.gradle的android块中添加配置,强制Gradle识别依赖的Release变体:
android { // ... 原有配置 // 过滤无效变体,确保只保留Release相关变体 variantFilter { variant -> if (variant.buildType.name == 'release' && variant.flavors.any { it.name == 'debug' }) { setIgnore(true) } } // 统一依赖解析策略,强制匹配项目使用的版本 configurations.all { resolutionStrategy { // 替换为你的React Native版本 force 'com.facebook.react:react-native:0.74.3' // 针对每个报错的依赖添加强制匹配,示例: force '@react-native-async-storage/async-storage:1.23.1' force 'com.swmansion.gesturehandler:react-native-gesture-handler:2.16.1' } } }
3. 重新生成预构建文件
清理并重新生成Expo预构建的Android原生文件,避免配置冲突:
npx expo prebuild --clean
4. 清理缓存后构建
- 本地清理缓存:
cd android && ./gradlew clean rm -rf node_modules && npm install
- EAS构建时强制清理云端缓存:
eas build -p android --profile preview --clear-cache
验证步骤
先在本地尝试构建Release包,确认配置生效:
cd android && ./gradlew assembleRelease
如果本地构建成功,再执行EAS云构建即可解决问题。
内容的提问来源于stack exchange,提问作者mukunda
相关产品推荐
相关产品推荐

