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

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 have to host yo

How to use UPI Deep Linking in Android

 In this Article we will discuss about the UPI Deep linking. By this Deep linking we can perform UPI Payments through intent .Basically it open the All UPI supported Application in our mobile then user choose their preference and initiate the Payment and through this we get the payment credentials like payment id ,transaction id ,etc. without any payment gateway. So lets start with what is UPI? Unified Payments Interface(UPI) is an instant real-time payment system developed by National Payments Corporation of India facilitating inter-bank transactions. The interface is regulated by the Reserve Bank of India and works by instantly transferring funds between two bank accounts on a mobile platform. (from Wikipedia) Coding part: package com.example.droidmedium; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Butt