I have added android:exported="true" to my only activity in manifest but still getting below error after updating compile sdk and target sdk version to 31.I also tried rebuilding the project , invalidating cache and restart but that didn't helped
Error- 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 File
<?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>
Merged manifest error
Other Manifest Files (Included in merge, but did not contribute any
elements) firebase-installations:17.0.0 manifest,
versionedparcelable:1.1.1 manifest, runtime:1.0.1 manifest,
test:core:1.2.0 manifest, loader:1.0.0 manifest, facebook-share:11.1.0
manifest, leakcanary:leaksentry:2.0-alpha-3 manifest,
material-dialogs:input:3.2.1 manifest, material-icons-extended:1.0.0
manifest, play-services-stats:17.0.0 manifest, interpolator:1.0.0
manifest, activity-compose:1.3.1 manifest, material-ripple:1.0.0
manifest, foundation:1.0.0 manifest, asynclayoutinflater:1.0.0
manifest, savedstate-ktx:1.1.0 manifest,
navigation-dynamic-features-fragment:2.3.5 manifest,
firebase-ui-auth:7.2.0 manifest, animation:1.0.1 manifest,
animation-core:1.0.1 manifest, installreferrer:1.0 manifest,
firebase-crashlytics:18.0.0 manifest, ui:1.0.1 manifest,
lifecycle-viewmodel-savedstate:2.3.1 manifest,
play-services-auth-base:17.0.0 manifest, hilt-android:2.35.1 manifest,
material-dialogs:core:3.2.1 manifest, AndroidManifest.xml navigation
file, savedstate:1.1.0 manifest, cursoradapter:1.0.0 manifest,
sqlite-framework:2.0.1 manifest, room-ktx:2.1.0 manifest,
leakcanary-android-core:2.0-alpha-3 manifest, AndroidManifest.xml
navigation file, media:1.0.0 manifest, coordinatorlayout:1.1.0
manifest, legacy-support-core-utils:1.0.0 manifest,
lifecycle-runtime:2.3.1 manifest, coil-kt:coil:1.3.1 manifest,
ui-tooling-preview:1.0.0 manifest, facebook-core:11.1.0 manifest,
core:1.6.0 manifest, material:1.0.0 manifest, firebase-common:20.0.0
manifest, documentfile:1.0.0 manifest,
lifecycle-viewmodel-compose:2.4.0-beta01 manifest,
play-services-base:17.1.0 manifest, ui-tooling-data:1.0.0 manifest,
coil-base:1.3.1 manifest, firebase-analytics-ktx:19.0.0 manifest,
localbroadcastmanager:1.0.0 manifest, swiperefreshlayout:1.1.0-alpha03
manifest, constraintlayout-compose:1.0.0-beta02 manifest,
core-ktx:1.6.0 manifest, firebase-database-collection:18.0.0 manifest,
coil-compose-base:1.3.1 manifest, activity:1.3.1 manifest,
AndroidManifest.xml navigation file, facebook-messenger:11.1.0
manifest, print:1.0.0 manifest, customview:1.1.0 manifest,
material-icons-core:1.0.0 manifest,
play-services-measurement-sdk:19.0.0 manifest, fragment:1.3.4
manifest, firebase-appcheck-interop:16.0.0-beta01 manifest,
facebook-login:11.1.0 manifest, cardview:1.0.0 manifest,
runtime-rxjava2:1.0.0 manifest, viewpager2:1.0.0 manifest,
play-services-ads-identifier:17.0.0 manifest,
play-services-measurement-impl:19.0.0 manifest,
lifecycle-livedata-core:2.3.1 manifest, play-services-safetynet:17.0.0
manifest, AndroidManifest.xml navigation file,
lifecycle-viewmodel-ktx:2.3.1 manifest, transport-backend-cct:3.0.0
manifest, fragment-ktx:1.2.4 manifest, appcompat:1.3.0 manifest,
transport-runtime:3.0.0 manifest, lifecycle-livedata-core-ktx:2.2.0
manifest, firebase-firestore-ktx:23.0.0 manifest,
legacy-support-v4:1.0.0 manifest, play-services-basement:17.1.1
manifest, firebase-storage:20.0.0 manifest,
play-services-auth-api-phone:17.4.0 manifest,
leakcanary-android:2.0-alpha-3 manifest, firebase-auth-interop:20.0.0
manifest, lifecycle-viewmodel:2.3.1 manifest, browser:1.0.0 manifest,
firebase-auth:21.0.1 manifest, material:1.2.1 manifest,
slidingpanelayout:1.0.0 manifest, vectordrawable:1.1.0 manifest,
recyclerview:1.1.0 manifest, play-services-auth:19.0.0 manifest,
room-runtime:2.1.0 manifest, dagger-lint-aar:2.35.1 manifest,
navigation-dynamic-features-runtime:2.3.5 manifest,
play-services-measurement-api:19.0.0 manifest,
firebase-encoders-json:18.0.0 manifest, sqlite:2.0.1 manifest,
facebook-android-sdk:11.1.0 manifest, firebase-components:17.0.0
manifest, transport-api:3.0.0 manifest,
protolite-well-known-types:18.0.0 manifest, markdown-processor:0.1.3
manifest, play-services-measurement-base:19.0.0 manifest,
firebase-common-ktx:20.0.0 manifest, activity-ktx:1.3.1 manifest,
firebase-crashlytics-ktx:18.0.0 manifest, coil-compose:1.3.1 manifest,
multidex:2.0.1 manifest, core-runtime:2.1.0 manifest,
fragment-testing:1.2.0 manifest, ui-graphics:1.0.1 manifest,
AndroidManifest.xml navigation file, ui-tooling:1.0.0 manifest,
grpc-android:1.28.0 manifest, ui-unit:1.0.1 manifest,
play-services-measurement:19.0.0 manifest, play:core:1.9.1 manifest,
annotation-experimental:1.1.0 manifest,
play-services-measurement-sdk-api:19.0.0 manifest,
play-services-tasks:17.0.0 manifest, firebase-analytics:19.0.0
manifest, facebook-common:11.1.0 manifest, drawerlayout:1.1.1
manifest, AndroidManifest.xml navigation file,
navigation-compose:2.4.0-alpha09 manifest,
facebook-gamingservices:11.1.0 manifest, firebase-firestore:23.0.0
manifest, lifecycle-livedata:2.2.0 manifest,
legacy-support-core-ui:1.0.0 manifest, test:monitor:1.2.0 manifest,
AndroidManifest.xml navigation file, facebook-applinks:11.1.0
manifest, viewpager:1.0.0 manifest, ui-geometry:1.0.1 manifest,
lifecycle-runtime-ktx:2.3.1 manifest, constraintlayout:2.0.4 manifest,
ui-text:1.0.1 manifest, AndroidManifest.xml navigation file,
firebase-installations-interop:17.0.0 manifest, transition:1.3.0
manifest, foundation-layout:1.0.1 manifest, appcompat-resources:1.3.1
manifest, runtime-livedata:1.0.0 manifest, runtime-saveable:1.0.1
manifest, firebase-measurement-connector:19.0.0 manifest,
vectordrawable-animated:1.1.0 manifest, main nav_graph.xml navigation
file Merging Errors: Error: android:exported needs to be explicitly
specified for . 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. Dairy.app main manifest (this file) Error:
android:exported needs to be explicitly specified for . 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. Dairy.app main manifest (this file) Error:
android:exported needs to be explicitly specified for . 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. Dairy.app main manifest (this file)
androidx.test:core library version 1.3.0. Upgrading to version 1.4.0 fixed the issue.
To solve this error in target sdk 31-
1.First of all set target sdk to 30
2.Then go to the merged manifest
3.Find if there’s any activity, service, receiver or provider that does not have android:exported set.Override all those entries and set their android:exported to true or false.
4.set target sdk back to 31 and run project
See also android:exported needs to be explicitly specified for <activity>. Apps targeting Android 12 and higher are required to specify.
Thanks to #faizy, #Android Developer I made this.
Upgrade these libraries to new versions:
androidTestImplementation "androidx.test.ext:junit:1.1.3"
androidTestImplementation "androidx.fragment:fragment-testing:1.4.1"
androidTestImplementation "androidx.test:core:1.4.0"
I replaced debugImplementation with androidTestImplementation in these dependencies.
Press Sync Project with Gradle Files. Run the project (or rebuild, or run Lint). Probably it won't help. Then you should make this.
Downgrade targetSdkVersion to 30.
Run the project again. Probably it will compile.
In my case all needed android:exported="true" and android:exported="false" presented in activity, service, receiver and provider of merged AndroidManifest where <intent-filter> occured.
To find merged AndroidManifest, switch to Project and expand app module, then build > intermediates > merged_manifest > debug.
If some android:exported was missing, find a corresponding AndroidManifest and add it there.
Upgrade targetSdkVersion to 31.
Run the project again. If it won't compile, probably you should rebuild the project. As usually, Build > Rebuild Project, File > Invalidate Caches > Invalidate and Restart.
After some time (several gradle syncs, restarts of Android Studio) it compiled.
The following in app/build.gradle may be the cause.
dependencies {
debugImplementation androidx.fragment:fragment-testing:<1.4.0-alpha02 or lower>’
}
Solution 1
Update fragment-testing to 1.4.0-alpha03 or higher.
Solution 2
Add the following to 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>
if you are using flutter , upgrading flutter_local_notifications to the latest version (now is 9.3.2) solved this error for me..
In my case the problem was with a dependency that strictly uses version 1.0.0 of androidx.test.core, so i can't upgrade it. what i did is to add android:exported="false" to androidx.test.core activity in my main manifest with tools:node="merge" so it can be merged with origin manifest
<activity
android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity"
android:exported="false"
tools:node="merge" >
</activity>
<activity
android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity"
android:exported="false"
tools:node="merge">
</activity>
and add the tools namespace.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp"
xmlns:tools="http://schemas.android.com/tools">
I had this problem, I add android:exported="true" and also tools:node="merge" to AndroidManifest.xml but however this error was appeared .
I found this is not about my project's Activates rather is about some dependencies, like this:
implementation 'com.najva.sdk:najva-android-sdk:1.3.3'
so check your project dependencies, you will find it surely.
if you use ogury Ads put this in youre AndroidManifest file
<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>
android { compileSdk 31
It is important to use latest version of Gradle and Gradle Plugin.
Update your all dependencies to latest version also.
If problem still persists.
Go to your manifest file.
Click merged manifest at the bottom.
Check the error at the bottom right side, which dependency is causing the error.
Go to that particular dependency from above mentioned dependencies.
Set android:exported="true" or android:exported="false" where error was mentioned in merged manifest.
Note: Updating that dependency to the latest version will probably also fix that issue. Because in the latest versions of dependenciesexported properties are already set.
This issue originates from dependencies of project. Right click on intent-filter and select find usages option. Now, in all usage places check that if exported assigned value or nor. If not, assign a value (Even in cache folders for libraries). This will fix issue until cache refresh but you have identifies the libraries creating this problem.
I found the answer,
you should add android:exported="true" to all activities, services and receivers in the AndroidManifest.xml file as following.
<activity
android:name="com.ryanheise.audioservice.AudioServiceActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="#style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:usesCleartextTraffic="true"
android:windowSoftInputMode="adjustResize">
<service android:name="com.ryanheise.audioservice.AudioService"
android:exported="true"
>
and for receiver
<receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver"
android:exported="true"
Explicitly add the conflicting service to Properties\AndroidManifest.xml file, so that when it is merged in by your plugin it retains the android:exported="true" (or false).
<application>
...
<service android:name="1234.PNFirebaseMessagingService" android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
for me the solution was to add this tools:node="merge" behind each android:exported="true" and add xmlns:tools="http://schemas.android.com/tools" property in your manifest balise.
The solution is very simple, all you have to do is make sure that all of these tags are present...
<activity
android:exported="true"/>
<receiver
android:exported="true"/>
<service
android:exported="true"/>
just add android:exported="true" to all dont change any thing
and If you do not have any of the tags, you must add them all
Got the solution for this one for Nativescript project. [Tried and Tested]
Search intent-filter in the build project directory (./platforms)
Check if each intent-filter parent (activity, service, reciever..) have property android:exported="true".
If it does not have android:exported="true" then copy the whole <service/activity/reciever></service/activity/reciever> block
and put it into AndroidMenifest.xml under App_resource folder, update
the tag with android:exported="true" and again build the project.
Should Work Now.
if you are using flutter , upgrading flutter_local_notifications to the latest version (now is 9.3.2) may solve this error..
solve is the problem :
1- targetSdkVersion if 31 change to 30
2- add line in AndroidManifest inside <activity android:exported="true" />
I'm trying to create bindings for Zendesk library and I faced with a problem.
Zendesk Belvedere library (belvedere-1.0.2.1.aar) contains a file provider in its manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
...
<application>
<provider
android:name="com.zendesk.belvedere.BelvedereFileProvider"
android:authorities="${applicationId}.belvedere.attachments"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="#xml/belvedere_attachment_storage" />
</provider>
</application>
</manifest>
When Gradle is used as build tool, it puts this aar to the APK file and it replaces ${applicationId}.belvedere.attachments with com.your_package_name_here.belvedere.attachments in the merged manifest file. It's fine.
However, Xamarin handles it differently. Here is what I found in the manifest of my final APK:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
...
<application
...
...
<provider
android:name="com.zendesk.belvedere.BelvedereFileProvider"
android:exported="false"
android:authorities="dollar_openBracket_applicationId_closeBracket"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="#xml/belvedere_attachment_storage" />
</provider>
...
...
</application>
</manifest>
Obviously, dollar_openBracket_applicationId_closeBracket is not what I need.
Seems everything works, however it makes impossible to install several Xamarin applications that use these bindings, because all of them would have conflicting providers with the same authority (and user would get INSTALL_FAILED_CONFLICTING_PROVIDER error).
Is there a way to change dollar_openBracket_applicationId_closeBracket in the manifest?
Edit: A small sample that shows the problem: https://gitlab.com/lassana/ZendeskXamarin/
The current Xamarin.Android manifest merge build task, up to and including
version 7.1.0.19, does not provide any bundeID/ApplicationID (${}} substitution in the merged manifest like gradle does.
This is just a limitation in the manifest processing/merge task, thus you are ending up with dollar_openBracket_applicationId_closeBracket in your final manifest and will have to correct both manifests yourself.
The only current solution know to me to avoid the manifest merge task and it's limitation is to:
Remove the file provider entry from the '.aar`'s manifest
Add the complete file provider entry your app's manifest
Note: You have to do both steps
Depending upon how often the .aar is changing and where you are sourcing the .aar file from:
Manually unzip the aar, remove the entry and re-zip the aar (the quickest way)
Automated this in a build step via a shell script using bash or powershell cmds
Write a MSBuild C#-based Task to do it.
Request that the aar manifest be changed upstream (not likely to happen ;-) since it works fine w/ gradle)
FYI: Personally I have seen the ${applicationId} issue you are having a few times. I have written build scripts (bash/.ps1) to do the manifest fix-up as it seems to always be some special case in the .arr's manifest that I am dealing with.
According to Microsoft team, Xamarin.Build.Download (0.4.12-preview) finally fixes this bug.
So, you should follow these steps:
Update the Nuget Package to 0.4.12-preview3
Restart the IDE
Delete all cached locations of NuGet Packages
Delete bin/obj
Rebuild
The main manifest file of your project is the higher priority manifest, so if you add the provider element to main manifest file and apply a merge rule marker for android:authorities attribute, the merger tools replaces the android:authorities value that you declare in the main manifest.
Declare provider element in main manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
...
...
<application>
<provider
android:name="com.zendesk.belvedere.BelvedereFileProvider"
android:authorities="com.example.belvedere.attachments"
tools:replace=”android:authorities” >
</provider>
</application>