You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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" />
    
    若应用需要发送通知,还需在代码中通过PermissionsAndroid API动态申请该权限。
  • 统一第三方库的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:25:02