AAPT报错找不到android:attr/windowSplashScreenBackground属性如何解决
问题根因
这些windowSplashScreen*属性是Android 12(API 31)才新增的系统属性,资源链接失败说明你的项目实际编译时依赖的API版本低于31,哪怕你本地装了SDK Platform 31也不生效。
修复步骤
- 第一步:修改编译SDK版本配置
打开你React Native项目的android/build.gradle(项目根Gradle配置文件),修改全局版本参数:
buildscript { ext { compileSdkVersion = 31 targetSdkVersion = 31 buildToolsVersion = "31.0.0" } }
如果报错的第三方库(比如react-native-splash-screen)强制指定了低版本编译SDK,你可以在同一份根Gradle文件末尾添加全局覆写配置,强制所有子模块使用31版本编译:
subprojects { afterEvaluate { project -> if (project.hasProperty("android")) { android { compileSdkVersion 31 buildToolsVersion "31.0.0" } } } }
- 第二步:拆分样式文件做版本适配
你现在直接在通用styles.xml里添加Android 12专属属性,会导致低版本场景编译异常,需要拆分配置:
- 在
android/app/src/main/res/目录下新建values-v31文件夹 - 在
values-v31文件夹内新建专属styles.xml,仅在这里添加Android 12的闪屏属性:
<item name="android:windowBackground">@drawable/splash</item> <item name="android:windowSplashScreenBackground">@drawable/splash</item> <item name="android:windowSplashScreenAnimatedIcon">@null</item>
- 回到原来的通用
values/styles.xml,删除里面的windowSplashScreenBackground、windowSplashScreenAnimatedIcon这两个Android 12专属属性,仅保留低版本兼容的配置。
- 第三步:清理缓存重新构建
执行以下命令清除旧的构建缓存,避免缓存的旧资源导致报错:
cd android ./gradlew clean rm -rf ~/.gradle/caches/
清理完成后重新运行项目即可。
额外注意
如果后续不需要使用alpha版的splashscreen兼容库,可以升级到core-splashscreen的正式稳定版,避免alpha版本的兼容问题。
内容的提问来源于stack exchange,提问作者Iuri Sampaio
相关产品推荐
相关产品推荐

