使用expo run:android构建兼容错误,但Android Studio构建成功
问题描述
通过Android Studio运行Android项目时,构建可成功完成(仅会因React服务器未运行报错),但执行expo run:android(本质是执行相同构建命令并启动React开发服务器)时,出现构建兼容错误,具体错误日志如下。
环境信息
系统: 操作系统: macOS 14.0 CPU: (8) arm64 Apple M2 内存: 91.08 MB / 8.00 GB Shell: 5.9 - /bin/zsh 二进制工具: Node: 18.15.0 - ~/Library/Caches/fnm_multishells/74130_1692514877370/bin/node npm: 9.5.0 - ~/Library/Caches/fnm_multishells/74130_1692514877370/bin/npm pnpm: 8.6.12 - ~/Library/pnpm/pnpm SDK: iOS SDK: 平台: DriverKit 23.0, iOS 17.0, macOS 14.0, tvOS 17.0, visionOS 1.0, watchOS 10.0 Android SDK: API级别: 28, 31, 33 构建工具: 27.0.3, 28.0.3, 30.0.3, 33.0.0, 33.0.2, 34.0.0 系统镜像: android-33 | Google APIs ARM 64 v8a, android-33 | Google Play ARM 64 v8a 语言: Bash: 3.2.57 - /bin/bash Java: 1.8.0_362 - /usr/bin/javac 浏览器: Chrome: 116.0.5845.96 Safari: 17.0 npm依赖包: @babel/core: ^7.22.10 => 7.22.10 @tsconfig/react-native: ^3.0.2 => 3.0.2 @types/react: ^18.2.20 => 18.2.20 @types/react-native-shared-group-preferences: ^1.1.1 => 1.1.1 @typescript-eslint/eslint-plugin: ^6.4.0 => 6.4.0 @typescript-eslint/parser: ^6.4.0 => 6.4.0 eslint: ^8.47.0 => 8.47.0 eslint-config-prettier: ^9.0.0 => 9.0.0 eslint-plugin-prettier: ^5.0.0 => 5.0.0 eslint-plugin-react: ^7.33.2 => 7.33.2 eslint-plugin-simple-import-sort: ^10.0.0 => 10.0.0 expo: ~49.0.7 => 49.0.7 expo-build-properties: ~0.8.3 => 0.8.3 expo-splash-screen: ~0.20.5 => 0.20.5 expo-status-bar: ~1.6.0 => 1.6.0 expo-system-ui: ^2.4.0 => 2.4.0 prettier: ^3.0.2 => 3.0.2 react: 18.2.0 => 18.2.0 react-native: 0.72.4 => 0.72.4 react-native-keyboard-aware-scroll-view: ^0.9.5 => 0.9.5 react-native-really-awesome-button: ^2.0.4 => 2.0.4 react-native-root-toast: ^3.4.1 => 3.4.1 react-native-shared-group-preferences: ^1.1.23 => 1.1.23 react-native-widget-bridge: ^0.1.3 => 0.1.3 typescript: ^5.1.6 => 5.1.6
错误日志
14:35 ﱮ RNWidget main ✘!?+74 via 🍞 v0.7.3 via v18.15.0 ✗ bun run android $ expo run:android › 正在构建应用... Configuration on demand is an incubating feature. FAILURE: 构建失败,出现异常。 * 错误原因: 配置根项目 'React Native Widget' 时出现问题。 > 无法确定null的依赖项。 > 无法解析配置 ':classpath' 的所有任务依赖项。 > 无法解析 com.android.tools.build:gradle:7.4.2。 被以下项目依赖: project : > 未找到匹配的 com.android.tools.build:gradle:7.4.2 变体。消费者配置为寻找运行时使用的库,兼容Java 8,打包为jar,依赖项外部声明,以及属性 'org.gradle.plugin.api-version' 值为 '8.0.1',但: - 变体 'apiElements' 具备 com.android.tools.build:gradle:7.4.2 能力,声明为库,打包为jar,依赖项外部声明: - 不兼容,因为该组件声明为编译时使用,兼容Java 11,而消费者需要运行时使用、兼容Java 8的组件 - 其他兼容属性: - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') - 变体 'javadocElements' 具备 com.android.tools.build:gradle:7.4.2 能力,声明为运行时使用的组件,依赖项外部声明: - 不兼容,因为该组件为文档,而消费者需要库 - 其他兼容属性: - 未提及目标Java版本 (要求兼容Java 8) - 未提及元素打包方式 (要求打包为jar) - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') - 变体 'runtimeElements' 具备 com.android.tools.build:gradle:7.4.2 能力,声明为运行时使用的库,打包为jar,依赖项外部声明: - 不兼容,因为该组件兼容Java 11,而消费者需要兼容Java 8的组件 - 其他兼容属性: - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') - 变体 'sourcesElements' 具备 com.android.tools.build:gradle:7.4.2 能力,声明为运行时使用的组件,依赖项外部声明: - 不兼容,因为该组件为文档,而消费者需要库 - 其他兼容属性: - 未提及目标Java版本 (要求兼容Java 8) - 未提及元素打包方式 (要求打包为jar) - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') > 无法解析 com.facebook.react:react-native-gradle-plugin。 被以下项目依赖: project : > 未找到匹配的 project :gradle-plugin 变体。消费者配置为寻找运行时使用的库,兼容Java 8,打包为jar,依赖项外部声明,以及属性 'org.gradle.plugin.api-version' 值为 '8.0.1',但: - 变体 'apiElements' 具备 com.facebook.react:react-native-gradle-plugin:unspecified 能力,声明为库,打包为jar,依赖项外部声明: - 不兼容,因为该组件声明为编译时使用,兼容Java 11,而消费者需要运行时使用、兼容Java 8的组件 - 其他兼容属性: - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') - 变体 'mainSourceElements' 具备 com.facebook.react:react-native-gradle-plugin:unspecified 能力,声明为组件,依赖项外部声明: - 不兼容,因为该组件属于'verification'类别,而消费者需要库 - 其他兼容属性: - 未提及目标Java版本 (要求兼容Java 8) - 未提及元素打包方式 (要求打包为jar) - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') - 未提及使用场景 (要求运行时) - 变体 'runtimeElements' 具备 com.facebook.react:react-native-gradle-plugin:unspecified 能力,声明为运行时使用的库,打包为jar,依赖项外部声明: - 不兼容,因为该组件兼容Java 11,而消费者需要兼容Java 8的组件 - 其他兼容属性: - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') - 变体 'testResultsElementsForTest' 具备 com.facebook.react:react-native-gradle-plugin:unspecified 能力: - 不兼容,因为该组件属于'verification'类别,而消费者需要库 - 其他兼容属性: - 未提及依赖查找方式 (要求依赖项外部声明) - 未提及目标Java版本 (要求兼容Java 8) - 未提及元素打包方式 (要求打包为jar) - 未提及 org.gradle.plugin.api-version (要求值为 '8.0.1') - 未提及使用场景 (要求运行时) * 建议尝试: > 使用 --stacktrace 选项获取堆栈跟踪。 > 使用 --info 或 --debug 选项获取更多日志输出。 > 使用 --scan 选项获取完整分析信息。 * 获取更多帮助请访问 https://help.gradle.org
解决方案
1. 升级Java版本至11或更高
错误核心是当前Java 8与Gradle插件7.4.2要求的Java 11不兼容。操作步骤:
- 安装OpenJDK 11或Oracle JDK 11
- 在项目根目录的
android/gradle.properties中添加配置,指定JDK路径:org.gradle.java.home=/path/to/your/jdk11 - 或直接将环境变量
JAVA_HOME指向JDK 11的安装路径
2. 对齐Gradle与Android Gradle Plugin版本
当前Gradle版本8.0.1和Android Gradle Plugin(AGP)7.4.2不匹配,可二选一操作:
- 降级Gradle版本:修改
android/gradle/wrapper/gradle-wrapper.properties中的distributionUrl为适配AGP 7.4.2的Gradle 7.5:distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip - 升级AGP版本:在
android/build.gradle的buildscript块中,将AGP版本改为与Gradle 8.0.1兼容的版本(如7.4.3):buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.4.3' } }
3. 清理缓存并重新构建
完成上述修改后,执行以下命令清理缓存并重新构建:
cd android ./gradlew clean cd .. expo run:android
内容的提问来源于stack exchange,提问作者ImBIOS
相关产品推荐
相关产品推荐

