Android:需要为<Activity>显式指定导出。针对Android 12及更高版本的应用程序需要指定

本教程将介绍Android:需要为<Activity>显式指定导出。针对Android 12及更高版本的应用程序需要指定的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

Android:需要为<Activity>显式指定导出。针对Android 12及更高版本的应用程序需要指定 教程 第1张

问题描述

升级到Android 12后,应用程序无法编译。它显示

清单合并失败,出现多个错误,请参阅日志

合并清单中显示错误:

合并错误:
错误:Android:需要为显式指定导出。当对应的组件定义了过滤的意图时,针对android 12及更高版本的应用需要为android:exported指定一个显式的值。有关详细信息,请参阅https://developer.android.com/guide/topics/manifest/activity-element#exported。主要清单(此文件)

我已使用android:exported="false"设置了所有活动。但仍显示此问题。

我的清单文件:

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

 <uses-sdk tools:overrideLibrary="net.ypresto.androidtranscoder" />

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_CONTACTS" />
 <uses-permission android:name="android.permission.READ_PROFILE" />
 <uses-permission
  android:name="android.permission.READ_PHONE_STATE"
  android:maxSdkVersion="22" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.WAKE_LOCK" />
 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <uses-permission android:name="android.permission.VIBRATE" />
 <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

 <uses-feature
  android:name="android.hardware.location"
  android:required="false" />
 <uses-feature
  android:name="android.hardware.location.gps"
  android:required="false" />
 <uses-feature
  android:name="android.hardware.location.network"
  android:required="false" />

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-permission android:name="android.permission.RECORD_AUDIO" />
 <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

 <uses-feature
  android:name="android.hardware.camera"
  android:required="false" />
 <uses-feature
  android:name="android.hardware.camera.autofocus"
  android:required="false" />
 <uses-feature
  android:name="android.hardware.microphone"
  android:required="false" />

 <application
  android:name=".Application"
  android:allowBackup="false"
  android:allowClearUserData="true"
  android:appCategory="social"
  android:hardwareAccelerated="true"
  android:icon="@mipmap/ic_app_launch"
  android:label="@string/app_name"
  android:largeHeap="true"
  android:networkSecurityConfig="@xml/network_security_configuration"
  android:requestLegacyExternalStorage="true"
  android:roundIcon="@mipmap/ic_app_launch_round"
  android:theme="@style/ConversationsTheme"
  android:usesCleartextTraffic="true"
  android:windowSoftInputMode="adjustPan|adjustResize"
  tools:replace="android:label"
  tools:targetApi="q">
  <activity
android:name=".ui.search.GroupSearchActivity"
android:exported="true" />
  <activity
android:name=".ui.profileUpdating.FavouritesActivity"
android:exported="true" />
  <activity
android:name=".ui.profileUpdating.NameActivity"
android:exported="true" />
  <activity
android:name=".ui.CompulsoryUpdateActivity"
android:exported="true" />
  <activity android:name=".ui.payments.doPayment.DoPaymentActivity"
android:exported="true" />
  <activity android:name=".ui.individualList.IndividualListActivity"
android:exported="true" />
  <activity android:name=".ui.payments.setPayment.SetPaymentActivity"
android:exported="true" />
  <activity android:name=".ui.login.otpActivity.OTPActivity"
android:exported="true" />
  <activity android:name=".ui.login.loginActivity.LoginActivity"
android:exported="true" />

  <service android:name=".services.XmppConnectionService" android:exported="true" />

  <receiver android:name=".services.EventReceiver"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.BOOT_COMPLETED" />
 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
 <action android:name="android.intent.action.ACTION_SHUTDOWN" />
 <action android:name="android.media.RINGER_MODE_CHANGED" />
</intent-filter>
  </receiver>

  <activity
android:name=".ui.ShareLocationActivity"
android:label="@string/title_activity_share_location"
android:exported="true"/>
  <activity
android:name=".ui.SearchActivity"
android:label="@string/search_messages"
android:exported="true" />
  <activity
android:name=".ui.RecordingActivity"
android:configChanges="orientation|screenSize"
android:theme="@style/ConversationsTheme.Dialog"
android:exported="true" />
  <activity
android:name=".ui.ShowLocationActivity"
android:label="@string/title_activity_show_location"
android:exported="true" />
  <activity
android:name=".ui.SplashActivity"
android:theme="@style/SplashTheme"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.MAIN" />

 <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
  </activity>
  <activity
android:name=".ui.ConversationsActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:minWidth="300dp"
android:minHeight="300dp"
android:exported="true"
android:windowSoftInputMode="stateHidden" />
  <activity
android:name=".ui.ScanActivity"
android:screenOrientation="portrait"
android:exported="true"
android:theme="@style/ConversationsTheme.FullScreen"
android:windowSoftInputMode="stateAlwaysHidden" />
  <activity
android:name=".ui.UriHandlerActivity"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.VIEW" />

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

 <data android:scheme="xmpp" />
</intent-filter>
<intent-filter android:autoVerify="true">
 <action android:name="android.intent.action.VIEW" />

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

 <data android:scheme="https" />
 <data android:host="im.app.in" />
 <data android:pathPrefix="/i/" />
 <data android:pathPrefix="/j/" />
</intent-filter>
<intent-filter>
 <action android:name="android.intent.action.SENDTO" />

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

 <data android:scheme="imto" />
 <data android:host="jabber" />
</intent-filter>
  </activity>
  <activity
android:name=".ui.StartConversationActivity"
android:label="@string/title_activity_start_conversation"
android:launchMode="singleTop"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.VIEW" />
</intent-filter>
  </activity>
  <activity
android:name=".ui.SettingsActivity"
android:label="@string/title_activity_settings"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.MAIN" />

 <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
</intent-filter>
  </activity>
  <activity
android:name=".ui.ChooseContactActivity"
android:label="@string/title_activity_choose_contact"
android:exported="true" />
  <activity
android:name=".ui.BlocklistActivity"
android:label="@string/title_activity_block_list"
android:exported="true"/>
  <activity
android:name=".ui.ChangePasswordActivity"
android:label="@string/change_password_on_server"
android:exported="true"/>
  <activity
android:name=".ui.ChooseAccountForProfilePictureActivity"
android:enabled="false"
android:label="@string/choose_account"
android:exported="true">
<intent-filter android:label="@string/set_profile_picture">
 <action android:name="android.intent.action.ATTACH_DATA" />

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

 <data android:mimeType="image/*" />
</intent-filter>
  </activity>
  <activity
android:name=".ui.ShareViaAccountActivity"
android:label="@string/title_activity_share_via_account"
android:launchMode="singleTop"
android:exported="true" />
  <activity
android:name=".ui.EditAccountActivity"
android:launchMode="singleTop"
android:exported="true"
android:windowSoftInputMode="stateHidden|adjustResize" />
  <activity
android:name=".ui.ConferenceDetailsActivity"
android:label="@string/action_muc_details"
android:exported="true"
android:windowSoftInputMode="stateHidden" />
  <activity
android:name=".ui.ContactDetailsActivity"
android:exported="true"
android:windowSoftInputMode="stateHidden" />
  <activity
android:name=".ui.PublishProfilePictureActivity"
android:label="@string/mgmt_account_publish_avatar"
android:exported="true"
android:windowSoftInputMode="stateHidden" />
  <activity
android:name=".ui.PublishGroupChatProfilePictureActivity"
android:exported="true"
android:label="@string/group_chat_avatar" />
  <activity
android:name=".ui.ShareWithActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.SEND" />
 <action android:name="android.intent.action.SEND_MULTIPLE" />

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

 <data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
 <action android:name="android.intent.action.SEND" />
 <action android:name="android.intent.action.SEND_MULTIPLE" />

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

 <data android:mimeType="*/*" />
</intent-filter>

<!-- the value here needs to be the full class name; independent of the configured applicationId -->
<meta-data
 android:name="android.service.chooser.chooser_target_service"
 android:value="eu.siacs.conversations.services.ContactChooserTargetService" />
  </activity>
  <activity
android:name=".ui.TrustKeysActivity"
android:label="@string/trust_omemo_fingerprints"
android:exported="true"
android:windowSoftInputMode="stateAlwaysHidden" />
  <activity
android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
android:exported="true"
android:theme="@style/Base.Theme.AppCompat" />
  <activity android:name=".ui.MemorizingActivity"
android:exported="true" />
  <activity
android:name=".ui.MediaBrowserActivity"
android:exported="true"
android:label="@string/media_browser" />

  <service android:name=".services.ExportBackupService" android:exported="true"/>
  <service android:name=".services.ImportBackupService" android:exported="true"/>
  <service
android:name=".services.ContactChooserTargetService"
android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"
android:exported="true">
<intent-filter>
 <action android:name="android.service.chooser.ChooserTargetService" />
</intent-filter>
  </service>
  <service android:name=".services.CompulsoryUpdateService" android:exported="true"/>

  <provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.files"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
 android:name="android.support.FILE_PROVIDER_PATHS"
 android:resource="@xml/file_paths" />
  </provider>
  <provider
android:name=".services.BarcodeProvider"
android:authorities="${applicationId}.barcodes"
android:exported="false"
android:grantUriPermissions="true" />

  <activity
android:name=".ui.ShortcutActivity"
android:label="@string/contact"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.CREATE_SHORTCUT" />
</intent-filter>
  </activity>
  <activity
android:name=".ui.MucUsersActivity"
android:exported="true"
android:label="@string/group_chat_members" />
  <activity
android:name=".ui.ChannelDiscoveryActivity"
android:exported="true"
android:label="@string/discover_channels" />
  <activity
android:name=".ui.RtpSessionActivity"
android:autoRemoveFromRecents="true"
android:exported="true"
android:launchMode="singleInstance"
android:supportsPictureInPicture="true" />
 </application>

</manifest>

我的第二个清单文件:

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

 <application tools:ignore="GoogleAppIndexingWarning">
  <activity
android:name=".ui.ManageAccountActivity"
android:label="@string/title_activity_manage_accounts"
android:launchMode="singleTask"
android:exported="true"/>
  <activity
android:name=".ui.MagicCreateActivity"
android:label="@string/create_new_account"
android:launchMode="singleTask"
android:exported="true"/>
  <activity
android:name=".ui.EasyOnboardingInviteActivity"
android:label="@string/invite_to_app"
android:launchMode="singleTask" />
  <activity
android:name=".ui.ImportBackupActivity"
android:label="@string/restore_backup"
android:launchMode="singleTask"
android:exported="true">
<intent-filter>
 <action android:name="android.intent.action.VIEW" />
 <category android:name="android.intent.category.DEFAULT" />

 <data android:mimeType="application/vnd.conversations.backup" />
 <data android:scheme="content" />
</intent-filter>
<intent-filter>
 <action android:name="android.intent.action.VIEW" />
 <category android:name="android.intent.category.DEFAULT" />

 <data android:mimeType="application/vnd.conversations.backup" />
 <data android:scheme="file" />
</intent-filter>
<intent-filter>
 <action android:name="android.intent.action.VIEW" />

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

 <data android:scheme="content" />
 <data android:host="*" />
 <data android:mimeType="*/*" />
 <data android:pathPattern=".*.ceb" />
 <data android:pathPattern=".*..*.ceb" />
 <data android:pathPattern=".*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*..*..*..*.ceb" />
</intent-filter>
<intent-filter>
 <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:host="*" />
 <data android:mimeType="*/*" />
 <data android:pathPattern=".*.ceb" />
 <data android:pathPattern=".*..*.ceb" />
 <data android:pathPattern=".*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*..*..*.ceb" />
 <data android:pathPattern=".*..*..*..*..*..*..*.ceb" />
</intent-filter>
  </activity>
 </application>
</manifest>

我的Gradle文件:

import com.android.build.OutputFile

// Top-level build file where you can add configuration options common to all
// sub-projects/modules.
buildscript {
 ext.kotlin_version = "1.5.21"
 repositories {
  google()
  mavenCentral()
  maven { url 'https://jitpack.io' }
  gradlePluginPortal()
 }
 dependencies {
  classpath 'com.android.tools.build:gradle:4.2.2'
  classpath 'com.google.gms:google-services:4.3.8'
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 }
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.gms.google-services'

repositories {
 google()
 mavenCentral()
 jcenter()
 maven { url 'https://jitpack.io' }
}

configurations {
 conversationsFreeCompatImplementation
}

dependencies {
 implementation 'androidx.viewpager:viewpager:1.0.0'
 implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

 implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

 implementation 'org.sufficientlysecure:openpgp-api:10.0'
 implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
 implementation 'androidx.appcompat:appcompat:1.3.1'
 implementation 'androidx.exifinterface:exifinterface:1.3.2'
 implementation 'androidx.cardview:cardview:1.0.0'
 implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
 implementation 'androidx.emoji:emoji:1.1.0'
 implementation 'com.google.android.material:material:1.4.0'
 conversationsFreeCompatImplementation 'androidx.emoji:emoji-bundled:1.1.0'
 implementation 'org.bouncycastle:bcmail-jdk15on:1.64'
 //zxing stopped supporting Java 7 so we have to stick with 3.3.3
 //https://github.com/zxing/zxing/issues/1170
 implementation 'com.google.zxing:core:3.4.1'
 implementation 'de.measite.minidns:minidns-hla:0.2.4'
 implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
 implementation 'org.whispersystems:signal-protocol-java:2.8.1'
 implementation 'com.makeramen:roundedimageview:2.3.0'
 implementation "com.wefika:flowlayout:0.4.1"
 implementation 'net.ypresto.androidtranscoder:android-transcoder:0.3.0'
 implementation 'org.jxmpp:jxmpp-jid:1.0.1'
 implementation 'org.osmdroid:osmdroid-android:6.1.10'
 implementation 'org.hsluv:hsluv:0.2'
 implementation 'org.conscrypt:conscrypt-android:2.5.2'
 implementation 'me.drakeet.support:toastcompat:1.1.0'
 implementation "com.leinardi.android:speed-dial:3.2.0"

 implementation "com.squareup.retrofit2:retrofit:2.9.0"
 implementation "com.squareup.retrofit2:converter-gson:2.9.0"
 implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.2"
 implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2'

 implementation 'com.google.guava:guava:30.1.1-android'
 implementation 'org.webrtc:google-webrtc:1.0.32006'

 // Lifecycle Helper
 implementation "androidx.activity:activity-ktx:1.3.0-rc02"
 implementation "androidx.fragment:fragment-ktx:1.3.6"

 //Navigation
 implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
 implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'

 //CardView
 implementation "androidx.cardview:cardview:1.0.0"

 //Country Code Picker
 implementation 'com.hbb20:ccp:2.5.3'

 //Firebase
 implementation 'com.google.firebase:firebase-bom:28.3.0'
 implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'
 implementation 'androidx.browser:browser:1.3.0'

 //OTP view
 implementation 'com.github.mukeshsolanki:android-otpview-pinview:2.1.2'

 //Retrofit
 implementation 'com.squareup.retrofit2:retrofit:2.9.0'
 implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

 //Gson
 implementation 'com.google.code.gson:gson:2.8.7'

 //Multidex
 implementation 'androidx.multidex:multidex:2.0.1'

 //Round Image
 implementation 'de.hdodenhof:circleimageview:3.1.0'

 // Button with image and text
 implementation 'com.github.Omega-R:OmegaCenterIconButton:0.0.4@aar'

 //Razor pay
 implementation 'com.razorpay:checkout:1.6.10'

 //Mixpanel Tracking
 implementation 'com.mixpanel.android:mixpanel-android:5.9.1'

 //Loading screen
 implementation 'com.wang.avi:library:2.1.3'

 //Loading
 implementation 'com.wang.avi:library:2.1.3'

 //Form
 implementation 'com.quickbirdstudios:surveykit:1.1.0'
}

ext {
 travisBuild = System.getenv("TRAVIS") == "true"
 preDexEnabled = System.getProperty("pre-dex", "true")
 abiCodes = ['armeabi-v7a': 1, 'x86': 2, 'x86_64': 3, 'arm64-v8a': 4]
}

android {
 compileSdkVersion 31

 defaultConfig {
  minSdkVersion 24
  targetSdkVersion 31
  versionCode 44
  versionName "2.0.4"
  multiDexEnabled = true
  archivesBaseName += "-$versionName"
  applicationId "com.app.app"
  resValue "string", "applicationId", applicationId
  def appName = "app"
  resValue "string", "app_name", appName
  buildConfigField "String", "APP_NAME", ""$appName""
 }

 splits {
  abi {
universalApk true
enable true
  }
 }

 configurations {
  compile.exclude group: 'org.jetbrains' , module:'annotations'
 }

 dataBinding {
  enabled true
 }

 dexOptions {
  // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false.
  preDexLibraries = preDexEnabled && !travisBuild
  jumboMode true
 }

 compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
 }

 flavorDimensions("mode", "distribution", "emoji")

 productFlavors {

  conversations {
dimension "mode"
  }
  free {
dimension "distribution"
versionNameSuffix "+f"
  }
  compat {
dimension "emoji"
versionNameSuffix "c"
  }
 }

 sourceSets {
  conversationsFreeCompat {
java {
 srcDir 'src/freeCompat/java'
 srcDir 'src/conversationsFree/java'
}
  }
 }

 buildTypes {
  release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
versionNameSuffix "r"
  }
  debug {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
versionNameSuffix "d"
  }
 }


 if (new File("signing.properties").exists()) {
  Properties props = new Properties()
  props.load(new FileInputStream(file("signing.properties")))

  signingConfigs {
release {
 storeFile file(props['keystore'])
 storePassword props['keystore.password']
 keyAlias props['keystore.alias']
 keyPassword props['keystore.password']
}
  }
  buildTypes.release.signingConfig = signingConfigs.release
 }

 lintOptions {
  disable 'MissingTranslation', 'InvalidPackage','AppCompatResource'
 }

 subprojects {

  afterEvaluate {
if (getPlugins().hasPlugin('android') ||
  getPlugins().hasPlugin('android-library')) {

 configure(android.lintOptions) {
  disable 'AndroidGradlePluginVersion', 'MissingTranslation'
 }
}

  }
 }

 packagingOptions {
  exclude 'META-INF/BCKEY.DSA'
  exclude 'META-INF/BCKEY.SF'
 }

 android.applicationVariants.all { variant ->
  variant.outputs.each { output ->
def baseAbiVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
if (baseAbiVersionCode != null) {
 output.versionCodeOverride = (100 * variant.versionCode) + baseAbiVersionCode
}
  }

 }
}

推荐答案

我遇到此问题,并且我使用的一个库未正确设置。

您可以通过执行以下步骤找到它:

    将目标SDK设置为30

    转到合并清单:

    转到所有库的单个清单文件(如果创建了合并的清单,则可以跳过此步骤,只需查看合并的清单)

    查找是否有任何活动、服务、接收方或提供者没有exported,并将其设置为满足相应需求。我们可以通过将库清单中编写的规范添加到应用程序清单中来覆盖它。更多信息:Documentation,Similar issue in a SDK。

    将目标SDK设置为31

    覆盖您找到的所有条目,如下所示:

<receiver android:name="<name_of_the_entry>"
 android:exported="false or true"
 tools:node="merge" />

好了关于Android:需要为&lt;Activity&gt;显式指定导出。针对Android 12及更高版本的应用程序需要指定的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。