我已经更新了我的模拟器版本和Android SDK版本到Android S(Android 12)。更新后,我无法运行该项目。我不能运行一个你好,世界!项目(空项目),但我可以构建Gradle以及,但我不能运行项目。我总是得到错误:
清单合并失败:当相应组件定义了意图过滤器时,针对Android 12及更高版本的应用程序需要为Android:exported
指定一个显式值。看见https://developer.android.com/guide/topics/manifest/activity-element#exported详细信息。
我该怎么修?
以下是一个截图:
如何在使用Android 12 SDK时解决此问题?
这个问题是关于应用解决方案后的问题,与这个问题不同。此外,这个问题比这个更古老。
如果您在清单中没有找到没有标记“android:exported=false”的活动的位置,那么很可能是在您的依赖项中。。。为了精确定位位置,首先将“compileSdkVersion”降级为30,将“targetSdkVersion”降级为30,这样它就可以构建。
android {
compileSdkVersion("android-S")
buildToolsVersion "30.0.3"
defaultConfig {
...
minSdkVersion 23
targetSdkVersion("S")
...
}
之后,在主manifest.xml窗口中有一个带有“合并清单”的选项卡。在那里,您可以检查哪些活动确切地没有"android:导出=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">
由于我的问题是在第三方依赖关系中,而且不会很快更新,所以我只添加了一个
对于金丝雀:
<?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=“merge”属性,并按照Leofaage的建议声明android:exported=true | false。
在清单中,在默认启动活动属性中添加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>
根据需要设置android:导出值。
广播接收器是否可以从其应用程序之外的非系统源接收html" target="_blank">消息——如果可以,则为“true”,如果不可以,则为“false”。如果"false",则广播接收器只能接收由系统、相同应用程序的组件或具有相同用户ID的应用程序发送的消息。
如果未指定,则默认值取决于广播接收器是否包含意图过滤器。如果接收器包含至少一个意图过滤器,则默认值为"true"。否则,默认值为“false”。
此属性不是限制广播接收器外部曝光的唯一方法。您还可以使用权限来限制可以发送消息的外部实体(请参见权限属性)。
来自Android文档
您需要指定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:exported值,则无法在运行android 12的设备上安装应用程序。
还要检查何时对“android:exported”值使用true/false。
我已将模拟器版本和 Android SDK 版本更新为 Android S (Android 12)。更新后,我无法运行该项目。我不能运行一个你好,世界!项目(空项目),但我可以构建Gradle以及,但我不能运行该项目。我总是得到错误: 清单合并失败:当相应的组件定义了意图过滤器时,针对Android 12和更高版本的应用程序需要为< code>android: exported指定一个显式值。详
问题内容: 我正在将当前项目的大型应用程序移至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.Core:Core:1.0.0]An
使用Android Studio 4.2.1,在我的build.gradle文件中将sdk目标更改为Android 12后,我收到一个错误。 选项卡中显示的错误如下: 然而,标记已应用于我的AndroidManifest。xml文件。我只有一个活动。没有服务或广播接收器。见下文: 我的身材。渐变(:app)文件: 知道我该如何解决这个问题吗?
我试着建立我的应用程序,但它错误的像这样 清单合并失败:[com.android.support:support-compat:28.0.0]AndroidManifest.xml:22:18-91中的属性application@AppComponentFactory value=(Android.support.v4.app.CoreComponentFactory)也出现在[AndroidX.