React Native项目升级compileSdkVersion至34遇AAPT2问题求助
React Native 0.63.5 升级 compileSdkVersion/targetSdkVersion 到34的兼容方案
核心结论
可以在不升级React Native主版本的前提下完成SDK34升级,但需要针对性调整AGP、Build Tools、依赖版本,并处理兼容性细节。
1. 是否需要升级buildToolsVersion、Gradle版本或其他依赖?
必须调整以下组件:
- buildToolsVersion:当前31.0.0过低,需升级至
34.0.0(与compileSdkVersion匹配,或使用更高的34.x.x版本),否则会触发AAPT2链接失败的错误。 - Android Gradle Plugin (AGP):原4.1.3不支持compileSdk 34,需升级至7.0.4(这是AGP7.x系列中与RN0.63.5兼容性相对较好的版本,避免直接用最新7.x带来的冲突)。
- Gradle版本:AGP7.0.4要求Gradle版本在7.0-7.2之间,建议升级至
gradle-7.0.2-bin.zip(与RN0.63.5的依赖兼容性更稳定)。
2. Firebase Messaging、AndroidX Core等依赖的调整
需要升级以下依赖以适配SDK34:
- firebaseMessagingVersion:原21.1.0过于老旧,需升级至
23.1.2(适配SDK34且与RN0.63.5兼容的稳定版本)。同时将com.google.gms:google-services升级至4.3.15,与新版Firebase依赖匹配。 - androidXCore:原1.6.0需升级至
1.10.1(包含SDK34所需的核心API适配,比如通知权限相关的兼容逻辑)。
3. 确保升级顺畅的额外步骤
- 清理构建缓存:执行以下命令彻底清理旧缓存,避免残留冲突:
cd android && ./gradlew clean rm -rf ../node_modules/.cache rm -rf ~/.gradle/caches - 适配SDK34的权限要求:在
AndroidManifest.xml中添加POST_NOTIFICATIONS权限(targetSdk34后,通知权限需显式申请):
若应用需要发送通知,还需在代码中通过<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />PermissionsAndroidAPI动态申请该权限。 - 统一第三方库的compileSdkVersion:检查项目中所有第三方Native库的build.gradle,若存在compileSdkVersion低于34的情况,在项目根
android/build.gradle中添加强制统一配置:subprojects { afterEvaluate { project -> if (project.hasProperty('android')) { android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion } } } } - NDK版本无需调整:当前NDK21.4.7075529与AGP7.0.4兼容,保持原有配置即可。
4. 能否不升级React Native版本完成升级?
可以。RN0.63.5的核心Native代码经过上述依赖调整后,能够兼容SDK34。关键是选择与RN0.63.5兼容的最低AGP7.x版本(7.0.4),同时配套升级Gradle和相关依赖,避免跨版本过大带来的兼容性问题。
最终配置示例
android/build.gradle
buildscript { ext { buildToolsVersion = "34.0.0" minSdkVersion = 24 compileSdkVersion = 34 targetSdkVersion = 34 firebaseMessagingVersion = "23.1.2" androidXCore = "1.10.1" ndkVersion = "21.4.7075529" } repositories { google() jcenter() // 保持原有其他仓库配置 } dependencies { classpath('com.android.tools.build:gradle:7.0.4') classpath 'com.google.gms:google-services:4.3.15' } }
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
内容的提问来源于stack exchange,提问作者Khadija
相关产品推荐
相关产品推荐

