You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级targetSdkVersion到33后Xamarin.Forms安卓应用出现INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误

问题描述

将Xamarin.Forms安卓应用的android:targetSdkVersion从30升级至33后,安装时触发以下错误:

ADB0010: Mono.AndroidTools.InstallFailedException: Unexpected install output: Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl417360231.tmp/base.apk (at Binary XML file line #50): crc64bf328679f9896e0c.MyFirebaseIIDService: Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present]

错误堆栈信息:

at Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) in /Users/runner/work/1/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Mono.AndroidTools/Internal/AdbOutputParsing.cs:line 357    at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)    at AndroidDeviceExtensions.d__12.MoveNext() in /Users/runner/work/1/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Xamarin.AndroidTools/Devices/AndroidDeviceExtensions.cs:line 208
--- End of stack trace from previous location where exception was thrown ---    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    at AndroidDeviceExtensions.d__12.MoveNext() in /Users/runner/work/1/s/xamarin-android/external/monodroid/tools/msbuild/external/androidtools/Xamarin.AndroidTools/Devices/AndroidDeviceExtensions.cs:line 225
--- End of stack trace from previous location where exception was thrown ---    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)    at Xamarin.Android.Tasks.FastDeploy.d__106.MoveNext() in /Users/runner/work/1/s/xamarin-android/external/monodroid/tools/msbuild/Tasks/FastDeploy.cs:line 351
--- End of stack trace from previous location where exception was thrown ---    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    at Xamarin.Android.Tasks.FastDeploy.d__106.MoveNext() in /Users/runner/work/1/s/xamarin-android/external/monodroid/tools/msbuild/Tasks/FastDeploy.cs:line 368
--- End of stack trace from previous location where exception was thrown ---    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)    at Xamarin.Android.Tasks.FastDeploy.d__100.MoveNext() in /Users/runner/work/1/s/xamarin-android/external/monodroid/tools/msbuild/Tasks/FastDeploy.cs:line 216    0

当前使用的AndroidManifest.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.myapplication.app" android:versionName="2.6.1" android:versionCode="16">
    <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="33" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-feature android:name="android.hardware.telephony" android:required="false" />
    <uses-feature android:name="android.hardware.location" android:required="false" />
    <uses-feature android:name="android.hardware.location.gps" android:required="false" />
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.location.network" android:required="false" />
    <!--<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />-->
    <uses-permission android:name="android.permission.CALL_PHONE" android:required="false" />
    <application android:allowBackup="true" android:requestLegacyExternalStorage="true" android:label="FieldDirect" android:largeHeap="true" android:theme="@style/MyTheme">
        <uses-library android:name="org.apache.http.legacy" android:required="false" />
        <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/icon_transparent" />
        <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/brown" />
        <meta-data android:name="com.google.android.geo.API_KEY" android:value="MyKey" />
        <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
        <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="${applicationId}" />
            </intent-filter>
        </receiver>
        <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.myapplication.app.fileprovider" android:exported="false" android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
        </provider>
    </application>
</manifest>
解决方案

错误核心原因:Android 12(API 31)及以上版本强制要求,当组件(Service、Receiver等)包含intent-filter时,必须显式声明android:exported属性。这里的crc64bf328679f9896e0c.MyFirebaseIIDService是Firebase自动生成的服务类,带有intent-filter但未配置该属性。

具体解决步骤:

  1. 在AndroidManifest.xml的<application>标签内,添加该服务的声明并指定android:exported:

    <service android:name="crc64bf328679f9896e0c.MyFirebaseIIDService" android:exported="false" />
    

    (Firebase IID服务无需对外暴露,因此设置为false即可;若业务需要允许外部调用,可改为true)

  2. 若使用的Firebase NuGet包版本较旧,建议升级至最新稳定版——新版本库已适配Android 12+的android:exported要求,可能自动处理此类问题。

  3. 清理项目缓存,重新生成解决方案后再部署应用,确保Manifest的修改生效。

内容的提问来源于stack exchange,提问作者Manthiram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:55:02