Android Studio 错误:“清单合并失败:定位到 Android 12 的应用”

我已将模拟器版本和 Android SDK 版本更新为 Android S (Android 12)。更新后,我无法运行该项目。我无法运行 Hello, World! 项目(空项目),但我可以构建 Gradle,但我无法运行该项目。我总是得到错误:

清单合并失败:当相应组件定义了意向过滤器时,定位到 Android 12 及更高版本的应用需要指定显式值。有关详细信息,请参阅 https://developer.android.com/guide/topics/manifest/activity-element#exportedandroid: exported

我该如何修复它?

这是一个截图:

This is a screenshot.

使用 Android 12 SDK 时,如何解决此问题?

这个问题是关于应用解决方案后的问题,与这个问题不同。此外,这个问题比这更古老


答案 1

您需要指定或android:exported="false"android:exported="true"

清单:

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:theme="@style/Theme.MyApplication.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

文档所述

如果您的应用以 Android 12 为目标平台,并且包含使用意向过滤器的活动、服务或广播接收器,则必须为这些应用组件明确声明 android: 导出属性。

警告:如果活动、服务或广播接收器使用意向过滤器,并且没有明确声明的 android:export 值,则您的应用无法安装在运行 Android 12 的设备上。

还要检查何时对“android:exported”值使用true/false。


答案 2

在清单中,在默认的启动活动属性中添加 android:exported=“true” 或 android:exported=“false”。

做!您可以在Android 12上运行您的应用程序。

<manifest ... >

    <activity
        android:name=".ui.dashboard.DashboardActivity"
        android:screenOrientation="portrait"
        android:exported="true"
        android:theme="@style/AppTheme.Launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</manifest>

根据您的要求设置机器人:导出值。

广播接收器是否可以从其应用程序外部的非系统源接收消息 — 如果可以,则为“true”,如果不是,则为“false”。如果为“false”,则广播接收方可以接收的唯一消息是系统、同一应用程序的组件或具有相同用户 ID 的应用程序发送的消息。

如果未指定,则默认值取决于广播接收器是否包含目的过滤器。如果接收方至少包含一个目的过滤器,则默认值为“true”。否则,默认值为“false”。

此属性不是限制广播接收器外部暴露的唯一方法。您还可以使用权限来限制可以发送消息的外部实体(请参阅权限属性)。

来自安卓文档


推荐