升级SDK至31后构建失败:processReleaseMainManifest任务报错
解决Android SDK 31升级后Manifest构建错误
问题原因
升级到Android SDK 31(对应Android 12及更高版本)后,谷歌强制要求:所有包含<intent-filter>的组件(Activity、Service、BroadcastReceiver等)必须显式声明android:exported属性,取值为true或false。未设置该属性会触发Manifest合并错误。
解决步骤
- 打开报错的
AndroidManifest.xml文件(路径:~/platforms/android/app/src/main/AndroidManifest.xml) - 遍历文件中所有包含
<intent-filter>的组件,找出未设置android:exported的条目 - 根据组件的访问需求设置属性值:
- 若组件需要接收外部应用的Intent(比如启动应用的主Activity),设置
android:exported="true" - 若组件仅用于应用内部,不需要外部访问,设置
android:exported="false"
- 若组件需要接收外部应用的Intent(比如启动应用的主Activity),设置
示例修改
比如主Activity的原始代码:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
修改后添加android:exported属性:
<activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
第三方库组件的处理
如果错误是由依赖的第三方库组件未设置android:exported导致的,可在自己的AndroidManifest.xml中覆盖该组件的属性,示例:
<activity android:name="com.example.library.ExternalActivity" android:exported="false" tools:node="merge" />
tools:node="merge"用于确保Manifest合并时保留你设置的属性值。
完成上述修改后,重新构建项目即可解决该错误。
内容的提问来源于stack exchange,提问作者Ravi Mittal
相关产品推荐
相关产品推荐

