当前位置: 首页 > 知识库问答 >
问题:

Android Studio错误:“清单合并失败:针对Android 12的应用程序”[重复]

秦弘亮
2023-03-14

我已将模拟器版本和 Android SDK 版本更新为 Android S (Android 12)。更新后,我无法运行该项目。我不能运行一个你好,世界!项目(空项目),但我可以构建Gradle以及,但我不能运行该项目。我总是得到错误:

清单合并失败:当相应的组件定义了意图过滤器时,针对Android 12和更高版本的应用程序需要为< code>android: exported指定一个显式值。详见https://developer . Android . com/guide/topics/manifest/activity-element # exported。

我怎么才能修好它?

这是一个截图:

使用Android 12 SDK如何解决这个问题?

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

共有3个答案

微生弘
2023-03-14

如果您在清单中没有找到没有标记“android:导出=false”的活动的位置,那么它很可能在您的依赖项中......为了准确定位位置,首先将“compileSdkVersion”降级为30,将“Target etSdkVersion”降级为30,以便构建

android {
    compileSdkVersion("android-S")
    buildToolsVersion "30.0.3"

    defaultConfig {
        ...
        minSdkVersion 23
        targetSdkVersion("S")
        ...
}

之后,在主舱单中。xml窗口中有一个带有“合并清单”的选项卡。在那里,您可以检查哪些活动没有“android:exported=false”属性。

对我来说,是因为第三方工具:

build.gradle(: app):

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
//and
debugImplementation "com.github.markzhai:blockcanary-android:1.5.0"
releaseImplementation "com.github.markzhai:blockcanary-no-op:1.5.0"

此外,对于服务,我必须添加属性:

<service
    android:name=".autofillservice.MyAutofillService"
    android:exported="true"
    android:permission="android.permission.BIND_AUTOFILL">

<service
    android:name="com.demo.myApp.my_access.MyAccessService"
    android:enabled="true"
    android:exported="true"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

由于我的问题是在第三方依赖项中,并且不会很快更新,因此我刚刚添加了一个

对于leak_canary:

<?xml version="1.0" encoding="UTF-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <application>
        <activity
            android:name="leakcanary.internal.activity.LeakActivity"
            android:exported="true"
            android:icon="@mipmap/leak_canary_icon"
            android:label="@string/leak_canary_display_activity_label"
            android:taskAffinity="com.squareup.leakcanary.${applicationId}"
            android:theme="@style/leak_canary_LeakCanary.Base">

            <intent-filter android:label="@string/leak_canary_import_hprof_file">

                <action android:name="android.intent.action.VIEW" />

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

                <data android:scheme="file" />
                <data android:scheme="content" />
                <data android:mimeType="*/*" />
                <data android:host="*" />

                <data android:pathPattern=".*\\.hprof" />
                <data android:pathPattern=".*\\..*\\.hprof" />
                <data android:pathPattern=".*\\..*\\..*\\.hprof" />
                <data android:pathPattern=".*\\..*\\..*\\..*\\.hprof" />
                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.hprof" />
                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.hprof" />
                <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.hprof" />
            </intent-filter>
        </activity>

        <activity
            android:name="leakcanary.internal.RequestStoragePermissionActivity"
            android:excludeFromRecents="true"
            android:exported="false"
            android:icon="@mipmap/leak_canary_icon"
            android:label="@string/leak_canary_storage_permission_activity_label"
            android:taskAffinity="com.squareup.leakcanary.${applicationId}"
            android:theme="@style/leak_canary_Theme.Transparent" />

        <receiver
            android:name="leakcanary.internal.NotificationReceiver"
            android:exported="false" />

    </application>
</manifest>

您还不如使用tools: node="合并"属性并按照LeoFarage的建议声明android:导出=true|false。

孔欣荣
2023-03-14

在您的清单中,在您的默认启动活动属性中添加android:导出="true"或android:导出="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>

根据您的要求设置android:exported值。

广播接收器是否可以从其应用程序之外的非系统来源接收消息—如果可以,则为“真”,否则为“假”。如果为“false”,广播接收器只能接收由系统、同一应用程序的组件或具有相同用户ID的应用程序发送的消息。

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

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

来自Android文档

司徒志强
2023-03-14

您需要指定< code > Android:exported = " false " 或< code > 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:exported显式声明的值,则您的应用不能安装在运行Android 12的设备上。

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

 类似资料:
  • 我已经更新了我的模拟器版本和Android SDK版本到Android S(Android 12)。更新后,我无法运行该项目。我不能运行一个你好,世界!项目(空项目),但我可以构建Gradle以及,但我不能运行项目。我总是得到错误: 清单合并失败:当相应组件定义了意图过滤器时,针对Android 12及更高版本的应用程序需要为指定一个显式值。看见https://developer.android.

  • 使用Android Studio 4.2.1,在我的build.gradle文件中将sdk目标更改为Android 12后,我收到一个错误。 选项卡中显示的错误如下: 然而,标记已应用于我的AndroidManifest。xml文件。我只有一个活动。没有服务或广播接收器。见下文: 我的身材。渐变(:app)文件: 知道我该如何解决这个问题吗?

  • 问题内容: 我正在将当前项目的大型应用程序移至Android Studio和Gradle中。我目前陷入以下问题: 我尝试将以下属性添加到主文件: 这些属性定义都不起作用。我究竟做错了什么? 问题答案: 试试看: 将此添加到 将此添加到 基于此,它应该覆盖所有元素。“将低优先级声明替换为带注释的声明。”

  • 我在移动我目前的项目巨大的应用程序到Android Studio和Gradle的过程中。我目前被困在以下问题上: 我尝试将以下属性添加到主文件中: 这些属性定义都不起作用。我做错了什么?

  • 我试着建立我的应用程序,但它错误的像这样 清单合并失败:[com.android.support:support-compat:28.0.0]AndroidManifest.xml:22:18-91中的属性application@AppComponentFactory value=(Android.support.v4.app.CoreComponentFactory)也出现在[AndroidX.

  • 错误:清单合并失败:[com.android.support:support-compat:28.0.0]AndroidManifest.xml:22:18-91中的属性application@AppComponentFactory value=(Android.support.v4.app.CoreComponentFactory)也出现在[AndroidX.Core:Core:1.0.0]An