Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present

回答 9 浏览 4.4万 2021-12-13

在安卓12系统中调试应用程序时,应用程序被崩溃了。

Rahul Kavati 提问于2021-12-13
9 个回答
#1楼 已采纳
得票数 139

Android 12要求你在你的主要活动中添加一段代码。

  1. 进入你的项目文件夹,打开AndroidManifest.xml文件。

  2. 在活动中添加以下代码

    android:exported="true"

  3. 举例说明

    <activity
         android:name=".MainActivity"
         android:exported="true"
         android:launchMode="singleTop"
         android:theme="@style/LaunchTheme"
     </activity>
    
Rahul Kavati 提问于2021-12-13
Rahul Kavati 修改于2022-02-13
这个属性必须在标签内设置。badelectron77 2022-01-06
为什么需要它?android:exported="true"是什么意思/作用?instanceof 2022-02-23
@instanceof 关于该属性的更多信息可以在medium.com/androiddevelopers/&hellip.com上找到。Michael Rumpler 2022-02-24
我想说的是,这个答案并不好。你需要在每个带有意图过滤器的活动和每个服务上都使用这个属性。再次感谢安卓公司的那些无用的更新,它们破坏了全世界数以百万计的部署!你们是冠军。你们是冠军!Nicolas Belley 2022-03-03
还要检查你的依赖关系是否更新。我的情况是 local_notifications 插件导致了错误,因为旧版本的插件没有设置导出的属性。julienduchow 2022-04-11
#2楼
得票数 28

AndroidManifest.xml 中添加 android:exported="true"

<manifest ...>
  <application ...>
    <activity
        android:exported="true"
edalvb 提问于2022-01-29
edalvb 修改于2022-01-31
这解决了我在flutter中构建时的问题,在app/src/main/AndroidManifest.xml中放置了android:exported="true"的位置redsd 2022-01-30
#3楼
得票数 7

感谢@rahul-kavati。

对于 Xamarin/MAUI,它是 ActivityAttribute 上的一个属性,像这样使用 [Activity(Label = "MsalActivity", Exported = true)]

Andrii 提问于2022-01-16
当我添加这个时,我得到了错误:System.InvalidOperationException。重复的属性,但我搜索了我所有的代码,Exported只定义了一次。有什么想法吗?Christine 2022-03-07
也许你有不止一次的机会?Andrii 2022-03-08
这是一个xamarin android的错误,github.com/xamarin/xamarin-android/issues/6463。该修复仅适用于VS22,我仍在运行VS19。Christine 2022-03-10
#4楼
得票数 7

在Android11及以下版本中,当在AndroidManifest中声明一个活动、服务或广播接收器时,你没有明确声明android:exported。因为默认值是exported=true,所以你只需要在不想向外界公开时声明exported=false。

<activity android:name="com.example.app.backgroundService">
    <intent-filter>
        <action android:name="com.example.app.START_BACKGROUND" />
    </intent-filter>
</activity>

Android 12的变化。在Android 12设备上将SDK API 31(android 12)设置为目标sdk的导出应用程序的明确声明必须在组件中明确声明导出,例如声明intent-filter的Activity。否则,会出现以下错误,安装失败。

Targeting S+ (version 10000 and above) requires that an explicit value for
android:exported be defined when intent filters are present
The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
Even for apps targeting SDK API 31, components without intent-filter can omit the exported declaration.

你必须明确地声明导出,如下所示。

<service android:name="com.example.app.backgroundService"
         android:exported="false">
    <intent-filter>
        <action android:name="com.example.app.START_BACKGROUND" />
    </intent-filter>
</service>

Intent-filter是向外界公开应用程序组件的方法之一。这是因为我的应用程序的组件可以通过对隐含意图的解析来执行。

另一方面,在很多情况下,它被用于只在我的应用程序内部执行具有隐含意图的组件,但由于没有设置导出,它被暴露在外部,这可能会影响隐含意图的解析。.

linuxias 提问于2022-05-03
#5楼
得票数 3

在Xamarin.Android中,我在BroadcastReceiver中也面临着同样的问题。

    [BroadcastReceiver(Enabled = true, Exported =true)]
    [IntentFilter(new[] { BluetoothDevice.ActionFound, BluetoothDevice .ActionUuid, BluetoothDevice .ExtraRssi})]
    public class BleReceiver : BroadcastReceiver

并且用同样的Exported=true解决了这个问题。

nefen 提问于2022-06-21
#6楼
得票数 2

In AndroidManifest.xml

     <activity
        android:exported="true"
        android:name="com.YOU.APP.activities.MainActivity"
        android:launchMode="singleTask"
        android:hardwareAccelerated="true">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
Alex Bolotnikoff 提问于2022-02-07
您的答案可以通过额外的支持信息得到改进。请编辑添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到更多关于如何写好答案的信息。Community 2022-02-07
#7楼
得票数 2

是的,在AndroidManifest.xml中。

 <activity
    android:exported="true" //here it is
    android:name="com.YOU.APP.activities.MainActivity"
    android:launchMode="singleTask"
    android:hardwareAccelerated="true">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>
Bogdan Zagreba 提问于2022-04-18
#8楼
得票数 0

如果您使用任何意图过滤器或服务,它必须具有android:export 属性

taxideals 提问于2022-02-23
Phil Seeman 修改于2022-07-14
#9楼
得票数 0

最快的方法是修改app/build.gradle中的targetSdkVersion,最大为30

linchuan 提问于2022-09-20