API 31的AAB在Android 12无法运行,API30的AAB无法上传Play Console求助
问题描述
- 上传targetSdkVersion 31的AAB到Google Play Console后,应用在Android 12设备上无法正常运行
- 尝试上传targetSdkVersion 30的AAB时,收到Play Console错误提示:
您的应用当前目标API级别为30,必须至少定位到API级别31,以确保基于针对安全性和性能优化的最新API构建。请将应用的目标API级别更改为至少31。
- targetSdkVersion 30的应用在Android 12设备上运行正常,但无法通过Play Console审核上架
环境信息
System: OS: macOS 12.3 CPU: (8) arm64 Apple M1 Memory: 76.81 MB / 8.00 GB Shell: 5.8 - /bin/zsh Binaries: Node: 16.15.0 - /usr/local/bin/node Yarn: 1.22.11 - /opt/homebrew/bin/yarn npm: 8.5.5 - /usr/local/bin/npm Watchman: 2022.11.07.00 - /opt/homebrew/bin/watchman Managers: CocoaPods: 1.11.3 - /usr/local/bin/pod SDKs: iOS SDK: Platforms: DriverKit 21.4, iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 8.5 Android SDK: API Levels: 23, 28, 29, 30, 31, 32 Build Tools: 26.0.0, 26.0.1, 26.0.2, 26.0.3, 28.0.3, 29.0.2, 29.0.3, 30.0.0, 30.0.2, 30.0.3, 31.0.0, 33.0.0 System Images: android-29 | Intel x86 Atom, android-30 | Google APIs ARM 64 v8a, android-30 | Google Play Intel x86 Atom, android-31 | Google APIs ARM 64 v8a Android NDK: 22.1.7171670 IDEs: Android Studio: 2021.3 AI-213.7172.25.2113.9123335 Xcode: 13.3/13E113 - /usr/bin/xcodebuild Languages: Java: 11.0.17 - /usr/bin/javac npmPackages: @react-native-community/cli: Not Found react: 17.0.1 => 17.0.1 react-native: 0.64.2 => 0.64.2 react-native-macos: Not Found npmGlobalPackages: *react-native*: Not Found
解决方案
你用的React Native 0.64.2默认对Android 12(API 31)适配不完善,需要针对性修改配置和代码来解决targetSdk31下的运行问题:
1. 适配Android 12权限与组件变更
- 前台服务权限:Android 12要求使用前台服务必须声明
android.permission.FOREGROUND_SERVICE权限,对应服务类型还需添加细分权限(比如定位类服务加FOREGROUND_SERVICE_LOCATION)。在AndroidManifest.xml里添加:<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 有定位前台服务就加下面这行 --> <!-- <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" /> --> - PendingIntent 可变性:Android 12要求
PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE。检查项目里的第三方库(比如推送、闹钟类),升级到支持Android 12的版本;如果是自定义代码创建PendingIntent,手动添加对应flag(不需要修改Intent内容就用FLAG_IMMUTABLE)。
2. 更新Gradle配置与依赖
- 升级Android Gradle Plugin:在
android/build.gradle里把AGP版本更改为7.0.4(适配RN 0.64.x的稳定版本):dependencies { classpath 'com.android.tools.build:gradle:7.0.4' // 其他依赖保持不变 } - 更新Gradle Wrapper:修改
gradle/wrapper/gradle-wrapper.properties里的distributionUrl:distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip - 锁定compileSdk和targetSdk为31:在
android/app/build.gradle里确认配置:android { compileSdkVersion 31 defaultConfig { targetSdkVersion 31 // 其他配置不变 } }
3. 排查第三方模块兼容性
RN 0.64.x的部分原生模块可能不兼容Android 12,按以下步骤排查:
- 逐个禁用第三方原生模块,重新构建测试,找出导致崩溃的模块,要么升级到兼容版本,要么替换成替代库。
- 查看logcat的崩溃日志,定位具体错误(比如
PendingIntent相关的IllegalArgumentException、权限拒绝错误),针对性修复。
4. 测试验证
- 在Android 12模拟器或真机上安装targetSdk31的APK,复现问题并通过logcat排查错误点,逐个修复。
- 修复完成后重新构建AAB上传到Play Console,确认审核通过,同时验证应用在Android 12设备上运行正常。
内容的提问来源于stack exchange,提问作者user20775431
相关产品推荐
相关产品推荐

