Attribute permission#<YOUR PACKAGE>.permission.C2D_MESSAGE#name value=(.permission.C2D_MESSAGE) - android

Manifest:
Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attribute permission#<YOUR PACKAGE>.permission.C2D_MESSAGE#name value=(.permission.C2D_MESSAGE) from AndroidManifest.xml
This error generate on Android Studio to build a project.
How to solve this error?

The problem is (as the error message shows) the same permission is available in another manifest (firebase manifest). So you can remove it from your manifest to solve the problem (easy approach). You can also override it in your manifest like below:
<permission android:name="<your-package-name>.permission.C2D_MESSAGE"
android:protectionLevel="signature"
tools:replace="android:name"/>
For using tools you need to add the xmlns:tools="http://schemas.android.com/tools" line in the manifest tag as below:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:allowBackup="false"
android:label="#string/app_name"/>

You can just write below code in your AndroidManifest.xml.
<manifest ...
xmlns:tools="http://schemas.android.com/tools"
...>
And in the application tag ->
<application
...
tools:replace="android:name">

Related

Manifest merger failed versionCode is also present at

I have a complex AndroidManifest.xml, which contains a receiver:
<receiver android:name=com.my.package.ApplicationBroadcastReceiver>
I want to create an AndroidManifest.xml for the debug version of my app.
I placed that under debug/AndroidManifest.xml. The only difference in the debug manifest is that I am using another receiver:
<receiver android:name=com.my.package.DebugApplicationBroadcastReceiver>
For now, I copied AndroidManifest.xml into debug/AndroidManifest.xml and just changed that line. After reading this page about merge rules, I specified this rule at the top of my debug/AndroidManifest.xml file:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.package"
android:versionCode="1"
android:versionName="1.0"
tools:node="replace">
However, when building I am getting this error:
Manifest merger failed : Attribute manifest#versionCode value=(1) from AndroidManifest.xml:5
is also present at AndroidManifest.xml:5
Attributes of <manifest> elements are not merged.
So even though I specified tools:node="replace" in the manifest tag, merging still fails.
My question has two parts:
A.How can I make the merging work?
B.Since the difference between AndroidManifest.xml and debug/AndroidManifest.xml is just one line, how can I just specify the line that is overriden instead of copying the whole file?
Based on your error message, you need something like this:
tools:replace="android:versionCode"

Facing error during Merging manifest file in android studio

I added PAYTM SDK in my project and now I am facing a problem with merging manifest file since the library has its own manifest file.
So I am getting
> Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute application#icon value=(#mipmap/logo) from AndroidManifest.xml:19:9-42
is also present at [com.paytm.pgsdk:pgsdk:1.0.6] AndroidManifest.xml:12:9-45 value=(#drawable/ic_launcher).
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:16:5-178:19 to override.
But after adding tools:replace="android:icon" in my application tag, my app has crashed at runtime by the following exception.
Caused by: java.lang.IllegalStateException: You need to use a
Theme.AppCompat theme (or descendant) with this activity.
Here is my manifest file.
<?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="com.example.demo">
<application
android:name="android.support.multidex.MultiDexApplication"
android:allowBackup="true"
tools:replace="android:icon"
android:icon="#mipmap/login_logo"
android:label="#string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="#style/AppTheme">
.
.
.
</application>
Just remove icon="#mipmap/login_logo" and theme="#style/AppTheme" from your Application Manifest and replace drawable ic_launcher in PayTM SDK with your app logo and that would do it.
Application will merge both manifests and you will get your desired theme and logo will be fetched from PayTM's manifest hence you would have replaced their ic_launcher with yours.
Finally, I have solved that theme issue by removing conflicting AppTheme's style from SDK.

Manifest Merger tools:replace failure

I am using a library which uses its own android:theme, and therefore I receive the following error while building:
Error:(55, 9) Execution failed for task ':contacit:processDebugManifest'.
Manifest merger failed : Attribute application#theme value=(#style/Theme.MainTheme) from AndroidManifest.xml:55:9
is also present at com.github.florent37:materialviewpager:1.0.3.2:11:18 value=(#style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to element at AndroidManifest.xml:49:5 to override
I've modified my app's AndroidManifest.xml as follows:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.main"
android:versionCode="19"
android:versionName="2.5" >
...
<application
android:name="com.example.application.MainApplication"
tools:replace="android:theme"
android:allowBackup="true"
android:icon="#drawable/logo_icon"
android:label="#string/app_name"
android:theme="#style/Theme.MainTheme"
>
...
However, even though I have used the tools:replace attribute, I am still getting the same error from the Manifest merger. Any ideas why?
Remove tools:replace and add tools:node="replace" to application tag. It works for me.

Tools: replace not replacing in Android manifest

I am using a gradle project with many different library dependencies and using the new manifest merger. In my <application /> tag I have it set up as such:
<application tools:replace="android:icon, android:label, android:theme, android:name"
android:name="com.example.myapp.MyApplcation"
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/application_name"
android:logo="#drawable/logo_ab"
android:theme="#style/AppTheme"
>
....
</application>
Yet I am receiving the error:
/android/MyApp/app/src/main/AndroidManifest.xml:29:9 Error:
Attribute application#icon value=(#drawable/ic_launcher) from AndroidManifest.xml:29:9
is also present at {Library Name} value=(#drawable/app_icon)
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:30:9 Error:
Attribute application#label value=(#string/application_name) from AndroidManifest.xml:30:9
is also present at {Library Name} value=(#string/app_name)
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:27:9 Error:
Attribute application#name value=(com.example.myapp.MyApplication) from AndroidManifest.xml:27:9
is also present at {Another Library}
Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:32:9 Error:
Attribute application#theme value=(#style/AppTheme) from AndroidManifest.xml:32:9
is also present at {Library Name} value=(#style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:26:5 to override
Declare your manifest header like this
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourpackage"
xmlns:tools="http://schemas.android.com/tools">
Then you can add to your application tag the following attribute:
<application
tools:replace="icon, label" ../>
For example I need to replace icon and label.
I fixed same issue. Solution for me:
add the xmlns:tools="http://schemas.android.com/tools" line in the manifest tag
add tools:replace=.. in the manifest tag
move android:label=... in the manifest tag
Example:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:replace="allowBackup, label"
android:allowBackup="false"
android:label="#string/all_app_name"/>
Try reordering your dependencies in your gradle file. I had to move the offending library from the bottom of the list to the top, and then it worked.
I just experienced the same behavior of tools:replace=... as described by the OP.
It turned out that the root cause for tools:replace being ignored by the manifest merger is a bug described here. It basically means that if you have a library in your project that contains a manifest with an <application ...> node containing a tools:ignore=... attribute, it can happen that the tools:replace=... attribute in the manifest of your main module will be ignored.
The tricky point here is that it can happen, but does not have to. In my case I had two libraries, library A with the tools:ignore=... attribute, library B with the attributes to be replaced in the respective manifests and the tools:replace=... attribute in the manifest of the main module. If the manifest of B was merged into the main manifest before the manifest of A everything worked as expected. In opposite merge order the error appeared.
The order in which these merges happen seems to be somewhat random. In my case changing the order in the dependencies section of build.gradle had no effect but changing the name of the flavor did it.
So, the only reliable workaround seems to be to unpack the problem causing library, remove the tools:ignore=... tag (which should be no problem as it is a hint for lint only) and pack the library again.
And vote for the bug to be fixed, of cause.
Final Working Solution for me (Highlighted the tages in the sample code):
add the xmlns:tools line in the manifest tag
add tools:replace in the application tag
Example:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pagination.yoga.com.tamiltv"
**xmlns:tools="http://schemas.android.com/tools"**
>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme"
**tools:replace="android:icon,android:theme"**
>
The missing piece for me was this:
xmlns:tools="http://schemas.android.com/tools"
for example:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.your.appid">
You can replace those in your Manifest application tag:
<application
tools:replace="android:icon, android:label, android:theme, android:name,android:allowBackup"
android:allowBackup="false"...>
and will work for you.
The following hack works:
add the xmlns:tools="http://schemas.android.com/tools" line in the
manifest tag
add
tools:replace="android:icon,android:theme,android:allowBackup,label"
in the application tag
tools:replace="android:supportsRtl,android:allowBackup,icon,label">
FIXED IT
HAD THE EXACT ERROR, Just add this tools:replace="android:icon,android:theme"
into your application tag in your manifest,
it works just fine,
You can replace those in your Manifest application tag:
<application
...
tools:replace="android:label, android:icon, android:theme"/>
and will work for you.
Explanation
Using such a dependency/library in your gradle file which has those labels in its Manifest's application tag may produce this problem and replacing them in your Manifest is the solution.
My problem is multi modules project with base module, app module and feature module.
Each module has AndroidManifest of its own, and I implemented build variant for debug and main.
So we must sure that "android:name" just declared in Manifest of debug and main only, and do not set it in any of Manifest in child module.
Ex:
Manifest in main:
<application
android:name=".App"/>
Manifest in debug:
<application
tools:replace="android:name"
android:name=".DebugApp"
/>
Do not set "android:name" in other Manifest files like this:
<application android:name=".App">
Just define in feature module like this and it will merged fine
<application>
I also went through this problem and changed that:
<application android:debuggable="true" android:icon="#drawable/app_icon" android:label="#string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="#style/UnityThemeSelector">
to
<application tools:replace="android:allowBackup" android:debuggable="true" android:icon="#drawable/app_icon" android:label="#string/app_name" android:supportsRtl="true" android:allowBackup="false" android:fullBackupOnly="false" android:theme="#style/UnityThemeSelector">
I was receiving a similar error on a project I was importing:
Multiple entries with same key: android:icon=REPLACE and
tools:icon=REPLACE
Fixed after changing the below line within the application tag:
tools:replace="icon, label, theme"
to
tools:replace="android:icon, android:label, android:theme"
This is new androidManifest.xml for flutter
<application
android:label="Your app Name"
tools:replace="android:label"
android:name="io.flutter.app.FlutterApplication"
android:networkSecurityConfig="#xml/network_security_config"
android:usesCleartextTraffic="true"
android:icon="#mipmap/ic_launcher">
please make to add android:label in the first line in <application, 'cause if you are using this package flutter_app_name will throw an error if the not sorted like example Above

Manifest merger failed when trying to add my own logo to android app - Android Studio

I tried to add my own icon to my app in Android Studio and I encountered a Manifest merger fail. I fount an identical question here but his answer is not working for me. I tried adding tools:replace="android:icon" and tools:replace="android:icon,android:theme" (on 2 separate occasions of course) but no change.
This is the error Android Studio is keep giving me.
Error:(12, 9) Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute application#icon value=(#drawable/footynews_logo_new) from AndroidManifest.xml:12:9
is also present at com.arasthel:gnavdrawer-library:1.1.4:4:45 value=(#drawable/ic_launcher)
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:9:5 to override
Error:(12, 9) Attribute application#icon value=(#drawable/footynews_logo_new) from AndroidManifest.xml:12:9
EDIT : I just found out even though I thought the app was using the ic_launcher in my project directory, it is actually using the ic_launcher in one of the libraries I'm using. How do I force the app to use my launcher icon instead?
tools:replace="android:icon,android:theme"
should work. Hope you added
xmlns:tools="http://schemas.android.com/tools"
If this is not working you have another option. Use the old manifest merger. Add this in your build.gradle file
android { useOldManifestMerger true }
You can find more information here.
Add two line in manifest file :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="..."
xmlns:tools="http://schemas.android.com/tools"> <!--Add this line-->
<application
android:icon="#drawable/icon"
android:label="#string/app_name"
tools:replace="icon, label"/> <!--Add this line-->
</manifest>

Categories

Resources