React Native升级targetSdkVersion至31后Android12包解析问题求助
React Native升级targetSdkVersion到31后Android 12解析包错误修复方案
问题核心原因
Android 12(API 31)强制要求所有带有<intent-filter>的组件(Activity、Service、Receiver)必须显式声明android:exported属性,同时编译环境版本需与targetSdkVersion匹配,你的配置中存在未补全属性、编译版本不匹配的问题。
具体修复步骤
1. 统一编译版本配置
修改项目级build.gradle,确保compileSdkVersion与targetSdkVersion一致,并升级匹配的buildToolsVersion:
buildscript { ext { buildToolsVersion = "31.0.0" // 升级到API31对应的构建工具版本 minSdkVersion = 21 compileSdkVersion = 31 // 必须与targetSdkVersion保持一致 targetSdkVersion = 31 ndkVersion = "20.1.5948944" googlePlayServicesVersion = "+" } repositories { google() jcenter() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle:7.0.4") // 升级到支持API31的gradle版本 classpath('com.google.gms:google-services:4.3.3') } }
同时更新gradle/wrapper/gradle-wrapper.properties中的gradle版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
2. 补全所有组件的android:exported属性
检查AndroidManifest.xml,为所有带<intent-filter>或可能被外部调用的组件添加该属性:
(1)Facebook相关Activity
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:exported="false" /> <!-- 添加此属性,非对外暴露设为false -->
(2)调试用DevSettingsActivity
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" /> <!-- 添加此属性,调试组件设为false -->
(3)推送相关Receiver
<receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationActions" android:exported="false" /> <!-- 添加此属性 --> <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" android:exported="false" /> <!-- 添加此属性 -->
3. 清理缓存并重新构建
执行以下命令清理旧构建缓存,重新编译项目:
cd android ./gradlew clean ./gradlew assembleRelease
验证要点
- 所有带有
<intent-filter>的组件必须明确设置android:exported为true或false compileSdkVersion必须与targetSdkVersion完全一致- Gradle构建工具版本需支持对应API级别
内容的提问来源于stack exchange,提问作者Ravindra Nakrani
相关产品推荐
相关产品推荐

