【问题标题】:android:exported added but still getting error Apps targeting Android 12 and higher are required to specify an explicit value for android:exported添加了 android:exported 但仍然出现错误 需要针对 Android 12 及更高版本的应用程序才能为 android:exported 指定显式值
【发布时间】:2021-11-16 02:42:26
【问题描述】:

我已将 android:exported="true" 添加到清单中的唯一活动中,但在将编译 sdk 和目标 sdk 版本更新为 31 后仍然出现错误。我还尝试重建项目,使缓存无效并重新启动,但这没有帮助

错误- Apps targeting Android 12 and higher are required to specify an explicit value for android:exported when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

AndroidManifest 文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xyz.abc">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:name=".framework.presentation.BaseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name="com.xyz.presentation.MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

合并清单错误

其他清单文件(包含在合并中,但没有贡献任何 元素)firebase-installations:17.0.0清单, versionedparcelable:1.1.1 清单,运行时:1.0.1 清单, 测试:核心:1.2.0 清单,加载程序:1.0.0 清单,facebook-share:11.1.0 清单,leakcanary:leaksentry:2.0-alpha-3 清单, 材料对话框:输入:3.2.1 清单,材料图标扩展:1.0.0 清单,播放服务统计:17.0.0 清单,插值器:1.0.0 清单,活动组成:1.3.1 清单,材料波纹:1.0.0 清单,基础:1.0.0 清单,asynclayoutinflater:1.0.0 清单,savestate-ktx:1.1.0 清单, 导航动态功能片段:2.3.5 清单, firebase-ui-auth:7.2.0 清单,动画:1.0.1 清单, 动画核心:1.0.1 清单,installreferrer:1.0 清单, firebase-crashlytics:18.0.0 清单,ui:1.0.1 清单, 生命周期视图模型保存状态:2.3.1 清单, play-services-auth-base:17.0.0 清单,hilt-android:2.35.1 清单, material-dialogs:core:3.2.1 manifest, AndroidManifest.xml 导航 文件,已保存状态:1.1.0 清单,光标适配器:1.0.0 清单, sqlite-framework:2.0.1 manifest, room-ktx:2.1.0 manifest, leakcanary-android-core:2.0-alpha-3 清单,AndroidManifest.xml 导航文件,媒体:1.0.0 清单,协调器布局:1.1.0 清单,遗留支持核心实用程序:1.0.0 清单, 生命周期运行时:2.3.1 清单,线圈 kt:线圈:1.3.1 清单, ui-tooling-preview:1.0.0 清单,facebook-core:11.1.0 清单, 核心:1.6.0 清单,材料:1.0.0 清单,firebase-common:20.0.0 清单,文档文件:1.0.0 清单, 生命周期-viewmodel-compose:2.4.0-beta01 清单, play-services-base:17.1.0 清单,ui-tooling-data:1.0.0 清单, 线圈基础:1.3.1 清单,firebase-analytics-ktx:19.0.0 清单, localbroadcastmanager:1.0.0 清单,swiperefreshlayout:1.1.0-alpha03 清单,constraintlayout-compose:1.0.0-beta02 清单, core-ktx:1.6.0 清单,firebase-database-collection:18.0.0 清单, 线圈组成基础:1.3.1 清单,活动:1.3.1 清单, AndroidManifest.xml 导航文件,facebook-messenger:11.1.0 清单,打印:1.0.0 清单,customview:1.1.0 清单, 材料图标核心:1.0.0 清单, 播放服务测量 SDK:19.0.0 清单,片段:1.3.4 清单,firebase-appcheck-interop:16.0.0-beta01 清单, facebook-login:11.1.0 清单,cardview:1.0.0 清单, runtime-rxjava2:1.0.0 清单,viewpager2:1.0.0 清单, 播放服务广告标识符:17.0.0 清单, play-services-measurement-impl:19.0.0 清单, 生命周期-livedata-core:2.3.1 manifest, play-services-safetynet:17.0.0 manifest,AndroidManifest.xml 导航文件, 生命周期-viewmodel-ktx:2.3.1 清单,transport-backend-cct:3.0.0 清单,片段 ktx:1.2.4 清单,appcompat:1.3.0 清单, 运输运行时:3.0.0 清单,生命周期-livedata-core-ktx:2.2.0 清单,firebase-firestore-ktx:23.0.0 清单, legacy-support-v4:1.0.0 清单,play-services-basement:17.1.1 清单,firebase 存储:20.0.0 清单, play-services-auth-api-phone:17.4.0 清单, leakcanary-android:2.0-alpha-3 清单,firebase-auth-interop:20.0.0 清单,生命周期视图模型:2.3.1 清单,浏览器:1.0.0 清单, firebase-auth:21.0.1 清单,材料:1.2.1 清单, 滑动面板布局:1.0.0 清单,vectordrawable:1.1.0 清单, recyclerview:1.1.0 清单,play-services-auth:19.0.0 清单, 房间运行时:2.1.0 清单,dagger-lint-aar:2.35.1 清单, 导航动态功能运行时:2.3.5 清单, play-services-measurement-api:19.0.0 清单, firebase-encoders-json:18.0.0 清单,sqlite:2.0.1 清单, facebook-android-sdk:11.1.0 清单,firebase-components:17.0.0 清单,传输 api:3.0.0 清单, protolite-well-known-types:18.0.0 清单,降价处理器:0.1.3 manifest, play-services-measurement-base:19.0.0 manifest, firebase-common-ktx:20.0.0 清单,activity-ktx:1.3.1 清单, firebase-crashlytics-ktx:18.0.0 清单,线圈组成:1.3.1 清单, multidex:2.0.1 清单,核心运行时:2.1.0 清单, 片段测试:1.2.0 清单,ui-graphics:1.0.1 清单, AndroidManifest.xml 导航文件,ui-tooling:1.0.0 manifest, grpc-android:1.28.0 清单,ui-unit:1.0.1 清单, 播放服务测量:19.0.0 清单,播放:核心:1.9.1 清单, 注释实验:1.1.0 清单, play-services-measurement-sdk-api:19.0.0 清单, 播放服务任务:17.0.0 清单,firebase 分析:19.0.0 清单,facebook-common:11.1.0 清单,抽屉布局:1.1.1 manifest,AndroidManifest.xml 导航文件, 导航-撰写:2.4.0-alpha09 清单, facebook-gamingservices:11.1.0 清单,firebase-firestore:23.0.0 清单,生命周期-livedata:2.2.0清单, legacy-support-core-ui:1.0.0 manifest, test:monitor:1.2.0 manifest, AndroidManifest.xml 导航文件,facebook-applinks:11.1.0 清单,viewpager:1.0.0 清单,ui-geometry:1.0.1 清单, 生命周期运行时 ktx:2.3.1 清单,约束布局:2.0.4 清单, ui-text:1.0.1 manifest,AndroidManifest.xml 导航文件, firebase 安装互操作:17.0.0 清单,过渡:1.3.0 清单,基础布局:1.0.1 清单,appcompat 资源:1.3.1 清单,运行时实时数据:1.0.0 清单,运行时可保存:1.0.1 清单,firebase 测量连接器:19.0.0 清单, vectordrawable-animated:1.1.0 清单,主要 nav_graph.xml 导航 文件合并错误:错误:android:exported 需要明确 指定为 .面向 Android 12 及更高版本的应用是 需要为 android:exported 指定显式值 相应的组件定义了一个意图过滤器。看 https://developer.android.com/guide/topics/manifest/activity-element#exported 详情。 Dairy.app 主清单(此文件)错误: android:exported 需要为 .应用 需要针对 Android 12 及更高版本指定显式 android:exported 的值,当相应的组件具有 定义了意图过滤器。看 https://developer.android.com/guide/topics/manifest/activity-element#exported 详情。 Dairy.app 主清单(此文件)错误: android:exported 需要为 .应用 需要针对 Android 12 及更高版本指定显式 android:exported 的值,当相应的组件具有 定义了意图过滤器。看 https://developer.android.com/guide/topics/manifest/activity-element#exported 详情。 Dairy.app 主清单(此文件)

【问题讨论】:

  • 检查您的合并清单(例如,通过 Android Studio 清单编辑器中的子选项卡),看看您是否有需要处理的库中的组件。
  • @CommonsWare Merged manifest has nothing to show with same error-"错误:需要为 显式指定 android:exported。针对 Android 12 及更高版本的应用需要为android:exported 对应组件定义了意图过滤器时"
  • @CommonsWare 如果是由于某些库,我相信我无法更改库活动的清单?我没有使用任何其他库,除了基本的 android 库,如 jetpack compose、hilt、room、firebase等
  • @CommonsWare 添加了合并清单完整错误/有问题的日志。
  • "如果是由于某些图书馆,我相信我无法更改图书馆活动的清单"——您应该能够使用 tools:replace 覆盖 android:exported 值,但您需要确定需要它的组件。

标签: android android-manifest manifest android-12 targetsdkversion


【解决方案1】:

构建失败后转到 AndroidManifest.xml 并在底部单击合并清单查看哪些活动具有意图过滤器但没有 exported=true属性。或者您可以只获取给出错误的活动。

使用 android:exported="true" 和应用程序 tools:node="merge" 将这些活动添加到您的应用清单中,这会将导出的属性添加到提供错误的活动中。

示例:

      <activity
            android:name="<activity which is giving error>"
            android:exported="true"
            tools:node="merge" />

您必须这样做一次,一旦库开发人员更新他们的库,您就可以将其删除。

【讨论】:

    【解决方案2】:

    解决目标sdk 31中的这个错误-

    1.首先将target sdk设置为30

    2.然后进入合并清单

    3.查找是否有任何活动、服务、接收者或提供者没有设置android:exported。覆盖所有这些条目并将其android:exported 设置为真或假。

    4.将目标sdk设置回31并运行项目

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,我将android:exported="true"tools:node="merge" 添加到AndroidManifest.xml,但是出现了这个错误。 我发现这与我的项目的激活无关,而与一些依赖项有关,如下所示:

      implementation 'com.najva.sdk:najva-android-sdk:1.3.3'
      

      所以检查你的项目依赖,你一定会找到的。

      【讨论】:

        【解决方案4】:

        app/build.gradle 中的以下内容可能是原因。

        dependencies {
            debugImplementation androidx.fragment:fragment-testing:<1.4.0-alpha02 or lower>’
        }
        
        解决方案 1

        fragment-testing 更新为1.4.0-alpha03 或更高版本。

        解决方案 2

        将以下内容添加到AndroidManifest.xml

        <manifest>
            <application>
                <activity
                    android:name="androidx.test.core.app.InstrumentationActivityInvoker$BootstrapActivity"
                    android:exported="false" />
                <activity
                    android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity"
                    android:exported="false" />
                <activity
                    android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity"
                    android:exported="false" />
            </application>
        </manifest>
        

        【讨论】:

          【解决方案5】:

          androidx.test:core 库版本 1.3.0。升级到 1.4.0 版解决了这个问题。

          【讨论】:

            【解决方案6】:

            此问题源于项目的依赖关系。右键单击intent-filter 并选择查找用法选项。现在,在所有使用位置检查是否导出分配的值或非。如果没有,请分配一个值(即使在库的缓存文件夹中)。这将在缓存刷新之前解决问题,但您已确定造成此问题的库。

            【讨论】:

              【解决方案7】:

              如果您使用 ogury 广告,请将其放入您的 AndroidManifest 文件中

               <activity
                      android:name="io.presage.mraid.browser.ShortcutActivity"
                      android:theme="@style/Presage.AdScreen"
                      android:exported="true">
                      <intent-filter>
                          <action android:name="android.intent.action.MAIN" />
                      </intent-filter>
                  </activity>
              

              【讨论】:

                猜你喜欢
                • 2022-01-06
                • 2022-06-11
                • 2021-10-11
                • 2021-10-03
                • 2023-02-12
                • 1970-01-01
                • 2022-08-20
                • 2022-01-21
                • 1970-01-01
                相关资源
                最近更新 更多