Xamarin Forms升级Android API Target Level至12遇android:exported错误求解决
解决Xamarin Forms升级Android 12的
android:exported错误问题 问题原因
你遇到的错误并非自身代码组件的问题,而是第三方NuGet包(如Xamarin.GooglePlayServices.Analytics、Firebase相关组件)的Manifest未添加android:exported属性,这些旧版本包未适配Android 12的要求,导致合并后的Manifest不符合规则。
具体解决步骤
1. 优先升级相关NuGet包到支持Android 12的版本
你的NuGet包版本偏旧,早期的Xamarin.GooglePlayServices和Firebase系列包未适配Android 12的exported要求:
- 找到项目中
Xamarin.GooglePlayServices.Analytics、Xamarin.Firebase.*等相关包,升级到2021年下半年及以后的稳定版本(这些版本已内置android:exported属性)。 - 注意:部分旧包已被弃用,比如
Xamarin.GooglePlayServices.Analytics可替换为Xamarin.Firebase.Analytics(Google官方推荐的新统计方案)。
2. 手动在AndroidManifest.xml中补全第三方组件的exported属性
如果暂时无法升级包(如存在依赖冲突),可在项目的AndroidManifest.xml中手动为报错组件添加属性:
- 先在Manifest根标签添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名"> - 然后在
<application>标签内添加以下内容(根据报错组件调整):<!-- FirebaseService 无需对外暴露,设为false --> <service android:name="crc643a9353f6fb65c51a.FirebaseService" android:exported="false" /> <!-- FirebaseIdService 设为false --> <service android:name="crc643a9353f6fb65c51a.FirebaseIdService" android:exported="false" /> <!-- BootReceiver 需要接收系统开机广播,设为true --> <receiver android:name="crc64df999be563077fc4.BootReceiver" android:exported="true" />
3. 清理重建项目
完成操作后,执行以下步骤避免缓存问题:
- 右键解决方案 → 清理解决方案
- 删除项目的
obj和bin文件夹 - 右键解决方案 → 重建解决方案
4. 检查并替换弃用包
若某些包已停止维护(如部分旧Xamarin.GooglePlayServices模块),建议替换为Google官方推荐的Firebase或Jetpack对应的Xamarin绑定包,从根源上避免适配问题。
内容的提问来源于stack exchange,提问作者elza james
相关产品推荐
相关产品推荐

