Xamarin:当TargetSdkVersion在manifest中设置为API 31时出现问题



参考Xamarin。Android 12.0发布说明,我将TargetFramework设置为Android 12,并且我能够毫无问题地部署项目。然而,当我在android manifest中将android:targetSdkVersion设置为API 31时,我遇到了以下错误:

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

只有当android:targetSdkVersion设置为31并部署到android 12的物理设备/模拟器时才会发生这种情况。我已经将android:exported="true"添加到MainActivity类和使用意图过滤器的类中。谁能告诉我如何解决这个问题?

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.myapp.simulation" android:versionName="1.0.30" android:versionCode="110" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="31" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application tools:replace="android:allowBackup" android:name="android.support.multidex.MultiDexApplication" android:icon="@drawable/launcher_icon" android:allowBackup="false" android:fullBackupOnly="false" android:label="Sample App">
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:enabled="true" 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>
</application>
</manifest>

根据错误信息,项目中的PackageUpdatedReceiver没有为android: exports设置值。因此,您可以尝试通过以下两种方式设置值。

  1. 在BroadCastReceiver的属性中设置:

[BroadcastReceiver(Exported = true)]

  1. 将其设置为AndroidManifest.xml中的application标签:

编辑:对于android 12,所有的服务,broadcastreceiver, Activity类需要声明android:exported的值。因此,请将三部分sdk更新到最新版本。

相关内容

最新更新