Expo Android构建失败:Gradle与Java版本兼容问题求助
问题描述
开发Expo应用时,执行npx expo run:android构建崩溃,报错信息如下:
FAILURE: Build failed with an exception.
出错原因:配置根项目'Doctor'时出现问题。
无法确定null的依赖项,无法解析':classpath'配置的所有任务依赖。
无法解析com.android.tools.build:gradle:7.4.1,该依赖被项目:需要。
未找到匹配的com.android.tools.build:gradle:7.4.1变体,消费者配置为寻找兼容Java 8、以jar包形式打包、依赖外部声明的运行时库,且要求'org.gradle.plugin.api-version'属性值为'7.5.1',但各变体存在如下不兼容情况:
- 'apiElements'变体:声明兼容Java 11的API库,与消费者需要的Java 8运行时不兼容,且未声明所需的插件API版本。
- 'javadocElements'变体:属于文档组件,不符合库的需求,且未满足Java版本、打包格式及插件API版本要求。
- 'runtimeElements'变体:声明兼容Java 11的运行时库,与Java 8需求不兼容,且未声明插件API版本。
- 'sourcesElements'变体:属于文档组件,不符合库的需求,且未满足各项要求。
无法解析com.android.tools.build:gradle:7.3.1,该依赖被项目: > project :react-native-gradle-plugin需要,不兼容原因同上。建议尝试:
使用--stacktrace选项获取堆栈跟踪;使用--info或--debug选项获取更多日志输出;使用--scan选项获取完整分析信息。更多帮助:https://help.gradle.org
构建在11秒内失败。
项目配置文件
app.json
{ "expo": { "name": "Doctor", "slug": "Doctor", "version": "1.0.4", "orientation": "portrait", "icon": "./assets/icon.png", "userInterfaceStyle": "light", "plugins": [["expo-location"]], "splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#ffffff" }, "assetBundlePatterns": ["**/*"], "ios": { "supportsTablet": true }, "android": { "adaptiveIcon": { "foregroundImage": "./assets/adaptive-icon.png", "backgroundColor": "#ffffff" }, "permissions": [ "ACCESS_COARSE_LOCATION", "ACCESS_BACKGROUND_LOCATION", "ACCESS_FINE_LOCATION" ], "package": "com.anonymous.Doctor", "versionCode": 3, "config": { "googleMaps": { "apiKey": "API_KEY" } } }, "web": { "favicon": "./assets/favicon.png" }, "extra": { "eas": { "projectId": "b68344f5-0eb0-42f7-a1a0-8e7805a97643" } } } }
package.json
{ "name": "doctor", "version": "1.0.0", "scripts": { "start": "expo start --dev-client", "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web" }, "dependencies": { "@expo/webpack-config": "^18.0.1", "@react-navigation/bottom-tabs": "^6.5.7", "@react-navigation/native": "^6.1.6", "@react-navigation/native-stack": "^6.9.12", "@reduxjs/toolkit": "^1.9.5", "axios": "^1.3.6", "expo": "~48.0.15", "expo-linear-gradient": "~12.1.2", "expo-location": "~15.1.1", "expo-status-bar": "~1.4.4", "react": "18.2.0", "react-native": "0.71.7", "react-native-maps": "1.3.2", "react-native-modal": "^13.0.1", "react-native-safe-area-context": "4.5.0", "react-native-web": "~0.18.10", "react-redux": "^8.0.5", "@react-native-async-storage/async-storage": "1.17.11", "expo-splash-screen": "~0.18.2" }, "devDependencies": { "@babel/core": "^7.20.0" }, "private": true }
解决方案
报错核心是Java版本与Gradle插件版本不匹配:当前环境使用Java 8,但Gradle 7.4.1/7.3.1插件需要Java 11及以上;同时Gradle插件版本与Gradle版本(7.5.1)存在兼容冲突。
步骤1:升级Java版本至11
- 检查当前Java版本:执行
java -version - 安装Java 11(OpenJDK或Oracle JDK均可),并通过
JAVA_HOME环境变量指定Java 11的安装路径,或使用版本管理工具(如jEnv)切换版本。
步骤2:统一Gradle相关版本
Expo 48对应React Native 0.71,需确保Gradle版本与Android Gradle Plugin(AGP)版本兼容:
- 打开项目根目录下的
android/build.gradle文件,修改AGP和Gradle版本:buildscript { ext { buildToolsVersion = "33.0.0" minSdkVersion = 21 compileSdkVersion = 33 targetSdkVersion = 33 // 匹配React Native 0.71的AGP版本 androidGradlePluginVersion = "7.4.2" // 与AGP 7.4.x兼容的Gradle版本 gradleVersion = "7.5" } // 保留其他原有配置 } - 清理Gradle缓存并同步配置:执行
cd android && ./gradlew clean,返回项目根目录后重新运行npx expo run:android。
步骤3:清理缓存(可选)
若上述步骤无效,清理Expo和Gradle缓存:
- 清理Expo缓存:
npx expo start --clear - 清理Gradle缓存:
cd android && ./gradlew cleanBuildCache
内容的提问来源于stack exchange,提问作者Asim Imam

