android - 面向 Android 12 及更高版本的应用需要为 `android:exported` 指定显式值

Posted

技术标签:

【中文标题】android - 面向 Android 12 及更高版本的应用需要为 `android:exported` 指定显式值【英文标题】:android - Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` 【发布时间】:2022-01-06 02:12:36 【问题描述】:

我已将我的 SDK 版本更新为 31,之后我收到此错误。这是我的 Gradle:

    android 
    compileSdkVersion 31

    defaultConfig 
        applicationId "com.persiandesigners.alldentshops"
        minSdkVersion 16
        targetSdkVersion 31
        vectorDrawables.useSupportLibrary = true
        versionCode 1
        versionName "1"
    

    buildTypes 
        release 
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        
    
    lintOptions 
        checkReleaseBuilds false
        abortOnError false
    


dependencies 
    implementation 'androidx.appcompat:appcompat:1.4.0'
    implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha01'
    implementation 'androidx.cardview:cardview:1.0.0-alpha01'
    implementation 'com.google.android.material:material:1.2.0-alpha01'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'

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

我按照它说的做了,这是我的清单代码:

<activity
        android:name="mypackage.MainActivity"
        android:exported="true"
        tools:node="merge"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/SplashScreenTheme"
        android:windowSoftInputMode="stateAlwaysHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

这是启动器活动,我添加了 android:exported 标签,我尝试清理并重建,但它没有工作。我仍然在清单合并中遇到合并错误:

Merging Errors: Error: android:exported needs to be explicitly specified for <activity>. 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. forushgah_alldentalshop.app main manifest (this file)

它指向 MainActivity 活动

【问题讨论】:

试试this***.com/questions/68554294/… 【参考方案1】:

如果您的应用面向 Android 12 或更高版本并包含使用 Intent 过滤器的活动、服务或广播接收器,则您必须为这些应用组件显式声明 android:exported 属性。

请注意,这适用于所有使用意图过滤器的活动、服务、广播接收器。

进行更改。保存。使缓存无效并重新启动android studio并检查。

【讨论】:

【参考方案2】:

如果您使用的是flutter,可能您的应用程序中一些已弃用的库会导致此问题。 在我的情况下:将flutter_local_notifications 升级到最新版本(现在是 9.3.2)解决了这个错误..

【讨论】:

以上是关于android - 面向 Android 12 及更高版本的应用需要为 `android:exported` 指定显式值的主要内容,如果未能解决你的问题,请参考以下文章

Android 13 第一个开发者预览版本来了,网友直呼:Android 12 还没透

android:exported 需要为 <activity> 显式指定。面向 Android 12 及更高版本的应用需要指定

InputManagerService实体按键及组合按键-Android12

InputManagerService实体按键及组合按键-Android12

InputManagerService实体按键及组合按键-Android12

Android12 新特性及适配指南