Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present
在安卓12系统中调试应用程序时,应用程序被崩溃了。
Android 12要求你在你的主要活动中添加一段代码。
进入你的项目文件夹,打开AndroidManifest.xml文件。
在活动中添加以下代码
android:exported="true"
举例说明
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" </activity>
android:exported="true"
是什么意思/作用?
- instanceof 2022-02-23
在 AndroidManifest.xml 中添加 android:exported="true":
<manifest ...>
<application ...>
<activity
android:exported="true"
android:exported="true"
的位置
- redsd 2022-01-30
感谢@rahul-kavati。
对于 Xamarin/MAUI,它是 ActivityAttribute
上的一个属性,像这样使用 [Activity(Label = "MsalActivity", Exported = true)]
在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是向外界公开应用程序组件的方法之一。这是因为我的应用程序的组件可以通过对隐含意图的解析来执行。
另一方面,在很多情况下,它被用于只在我的应用程序内部执行具有隐含意图的组件,但由于没有设置导出,它被暴露在外部,这可能会影响隐含意图的解析。.
在Xamarin.Android中,我在BroadcastReceiver中也面临着同样的问题。
[BroadcastReceiver(Enabled = true, Exported =true)]
[IntentFilter(new[] { BluetoothDevice.ActionFound, BluetoothDevice .ActionUuid, BluetoothDevice .ExtraRssi})]
public class BleReceiver : BroadcastReceiver
并且用同样的Exported=true解决了这个问题。
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>
是的,在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>
如果您使用任何意图过滤器或服务,它必须具有android:export
属性
最快的方法是修改app/build.gradle
中的targetSdkVersion
,最大为30