Skip to main content

Manifest Merger Failed Apps Targeting Android 12

Hello Everyone ! Hope you are doing well .Recently Google Play Store accepting new apps only with target SDK API level 31 . As per Google Policy :

"New apps must target Android 12 (API level 31) or higher; except for Wear OS apps, which must target Android 11 (API level 30) or higher.

Starting in November 2022, app updates must target API level 31 or above and adjust for behavioral changes in Android 12; except for Wear OS apps, which must target API level 30 or higher."

Now come to the challenging part when you try to upgrade your current API level to 31 you may face some issues like "Manifest Merger failed apps targeting Android 12".

Now come to the solution part :

Google recently introduce a new tag for every activity you created on your AndroidManifest.xml file which is "android:exported"

what is android:exported ?

In simple words android:exported is nothing but a tag introduce for security purpose in Android 12 and latest smartphones.you have to pass its value to true or false as per your choice or requirements.

if you set its value to true it means other application can call your activity from their app's intent and if you set it to false then other app's intent call can not call your activity and they get an error like NoActivityFound or som other exceptions.Lets talk about its specific defination:

This element sets whether the activity can be launched by components of other applications:

If "true", the activity is accessible to any app, and is launchable by its exact class name.

If "false", the activity can be launched only by components of the same application, applications with the same user ID, or privileged system components. This is the default value when there are no intent filters.

If an activity in your app includes intent filters, set this element to "true" to allow other apps to start it. For example, if the activity is the main activity of the app and includes the category "android.intent.category.LAUNCHER".

If this element is set to "false" and an app tries to start the activity, the system throws an ActivityNotFoundException.

Now you understand about exported features this is the task we have to perform to make our app API 31 compatible.


How to do that ?

Simply add the android:exported="true|false" in  your activity tag under AndroidManifest.xml file.


Q: Is it necessary to add this tag at every activity?

A: It is good for your app security and the latest version of android studio automatically add this line to your newly created activity. So it is good habit to add this line but if you leave this line in some activity which don't have intent-filter tag than its ok .

You must have to add "android:exported" in every activity which have intent-filter tag on it like your splash activity or some other Activity , you can set its value as per your need.

Note: Every Firebase Service ,Activity ,Broadcast Receiver ,Service and other components which uses phones external services required that tag .So you have to apply same.

Now come to most asked question.

Q: I apply this tag in every Activity ,Broadcast Receiver and Service which required but still getting Manifest Merger Failed error ,what should I do?

via GIPHY

A:

Step 1:

 Its because some other third party library generating this error ,all you have to do is set your API level to previous one like 30 and target SDK also 30 and than build gradle file again.In most cases it is because of payment gateway like Razorpay and some other.

Ste 2:

Now come to AndroidManifest.xml file and in bottom click on MergedManifest and file those activity,Service,Broadcast Receiver,Firebase Service which don't have android:exorted tag and have intent-filter tag .

Step 3:

Right click on that particular and click on Go To Declaration and copy that activity and paste in your Apps AndroidManifest.xml file.  

Step 4:

Now go to build.gradle file and and change your API level to 31 and build the gradle again. Now go to MergedManifest you will find everything working .

You  have all done .Thank you for your time and if you like and learn something then share it with your friends. 

References:

https://developer.android.com/google/play/requirements/target-sdk

https://developer.android.com/guide/topics/manifest/activity-element


Comments

Popular posts from this blog

How to Download Apk file from Url and Install Programmatically

In this post we learn about download apk file from server or website and then install it Programmatically in Phone. Sometimes we have to download external apk file from server and then install if downloading successfully finished.For this we use AsyncTask class  for background process. So here is Code Snippet for this task.Lets Start :- Before this we have to add these Permissions in Manifest.xml file : <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> DownloadNewVersion.java class DownloadNewVersion extends AsyncTask<String,Integer,Boolean> { @Override protected void onPreExecute() { super.onPreExecute(); bar = new ProgressDialog(getActivity()); bar.setCancelable(false); bar.setMessage("Downl...

Auto read OTP using SMS User Consent API in Android

Some times ago Google Play restricts the use of high risk or sensitive permissions, including the SMS or Call Log permission groups. It means you have to justify why you are taking SMS or other high risk or sensitive permissions for your application .For this you may be required to complete the Permissions Declaration Form and receive approval from Google Play. Before this every app even who does not have any purpose for taking SMS or other high sensitive permissions in their app ,They was taking these permissions from users and this is a kind of security beach.  For solution of this problem Google introduce SMS User Consent API . The SMS User Consent API complements the SMS Retriever API by allowing an app to prompt the user to grant access to the content of a single SMS message. When a user gives consent, the app will then have access to the entire message body to automatically complete SMS verification. If your appeal for SMS permission is rejected by Google team you can u...

How to open pdf file url using webview in Android

 Sometimes we have requirement of showing pdf file in our Android Application. Although there are many third party gradle dependencies available online by which you can show your pdf file easily but one of the major drawback of using these libraries are they will increase you apk size .In some cases they will increase apk size upto ~14 MB. Alternatively you can access and show pdf file using assets and from storage options. This can take less size than any third party library. Here we use pdf using url and if you directly open your pdf file url in webview you will get no result because it will start downoad if you open this link in any web browser.  So in this article we will learn how we can open our pdf url using webview and without using any third party library. So lets Start step by Step:- Lets Suppose you have a pdf file url something like   http://yourwebsite.com/files/mydocumentfile.pdf Step 1: So we you this pdf file url to embed in our webview .First of all you h...