接手4年未维护的React Native安卓编译报错求助
针对React Native 0.64.3旧项目安卓编译错误的解决方案
错误1:配置:expo-application项目时,无法获取SoftwareComponentInternal集合的'release'属性
这个问题源于expo依赖与Gradle版本不兼容,结合RN 0.64.3的版本特性,按以下步骤修复:
- 锁定expo依赖的兼容版本:打开项目根目录的
package.json,将expo相关依赖修改为RN 0.64.3匹配的版本:"expo": "^44.0.0", "expo-application": "^4.0.1" - 重新安装依赖:执行
npm install或yarn install - 清理Gradle缓存:进入android目录,执行
./gradlew clean,然后删除android/.gradle文件夹
错误2::expo项目未指定compileSdkVersion
该问题是因为项目Gradle配置未正确传递compileSdkVersion参数给expo模块,修复步骤:
- 修改
android/build.gradle,在buildscript的ext块中明确指定版本参数:buildscript { ext { buildToolsVersion = "29.0.3" minSdkVersion = 21 compileSdkVersion = 29 targetSdkVersion = 29 // 保留原有其他配置 } // 保留原有其他配置 } - 确保
android/app/build.gradle继承根目录的版本配置:android { compileSdkVersion rootProject.ext.compileSdkVersion // 保留原有其他配置 } - 检查
android/build.gradle的仓库配置,确保expo仓库存在:allprojects { repositories { mavenLocal() maven { url "$rootDir/../node_modules/react-native/android" } maven { url "$rootDir/../node_modules/jsc-android/dist" } maven { url 'https://maven.google.com' } maven { url 'https://www.jitpack.io' } maven { url "https://maven.expo.dev/repository/expo/" } } }
额外环境校验(必做)
由于项目是近4年未维护的旧版本,必须严格匹配RN 0.64.3的官方环境:
- Node版本:强制使用v14.17.0,用nvm切换:
nvm use 14.17.0,不要用18/19版本 - Java版本:使用Java 11(LTS版本兼容性最佳),配置
JAVA_HOME指向Java 11安装目录 - Gradle版本:修改
android/gradle/wrapper/gradle-wrapper.properties为官方匹配版本:distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip - Android Build Tools:确保安装29.0.3版本,与配置中的
buildToolsVersion一致
最终编译步骤
- 删除
node_modules、package-lock.json/yarn.lock,重新执行npm install - 进入android目录执行:
./gradlew clean && rm -rf .gradle - 执行编译:
./gradlew assembleDebug
内容的提问来源于stack exchange,提问作者Faye
相关产品推荐
相关产品推荐

