36

I updated 'android.support:appcompat-v7' to 28.0.0.

But it brought an error from the build.

Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91

    is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).

    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:8:5-23:19 to override.

Then I get this error in my Logcat:

Manifest merger failed

my app.gradle:

  configurations.all {
    resolutionStrategy.force 'com.android.support:design:28.0.0'
    resolutionStrategy.force "com.android.support:support-v4:28.0.0"
    resolutionStrategy.force "com.android.support:support-media-compat:28.0.0"
  }
...
dependencies {
  implementation 'com.android.support:multidex:1.0.1'

  // Our dependencies
  implementation 'com.android.support:appcompat-v7:28.0.0'


  implementation 'com.android.support:appcompat-v7:28.0.0'
}

how do I fix it?

I need your solutions.

Thank you in advance.

4
  • 4
    having the same issue.... my app was working fine yesterday, but today i just run the command react-native run-android and rest is history. Commented Jun 18, 2019 at 6:54
  • @PatelDhara unfortunately no, i will definitely post some where if i have a solution Commented Jun 19, 2019 at 4:42
  • @PatelDhara this is great, how did you do that? can you please share the solution? Commented Jun 19, 2019 at 4:53
  • 1
    @MDHusnainTahir I have shared my solution as an answer. you can see below. If that solution doesn't work for you then share your package.json file. I may help you Commented Jun 19, 2019 at 5:03

13 Answers 13

48

Upgrading 'react-native-device-info' to version 2.1.2 fixed the error for me. See github.com/facebook/react-native/issues/25294#issuecomment-503024749

In short: the library used "services-gcm:+" as a dependency, and the latest gcm version caused this problem.

0
13

The root cause is related migration to Androidx, google play service updated to androidX Thanks to MR03web This problem belongs to react-native-device-info? best option is to upgrade react-native-device-info using

yarn upgrade [email protected]
cd android && gradlew clean
react-native run-android

or if you don't want to upgrade you should exclude com.google.android.gms from react-native-device-info like this. Thanks

implementation(project(":react-native-device-info"),  {
  exclude group: "com.google.android.gms"
})
implementation "com.google.android.gms:play-services-gcm:16.0.0"
2
  • I haven't used the package react-native-device-info and i am getting the same error.
    – shah
    Commented Jun 18, 2019 at 11:25
  • Thanks man. this worked for me on "react-native": "0.59.5", Commented Dec 16, 2019 at 7:21
7

Add the following to your gradle.properties then clean/rebuild

googlePlayServicesVersion=16.1.0
firebaseVersion=17.6.0
6

I found a solution through my search by referring to @MehulSolanki answer.

I add

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

in my on AndroidManifest.xml

and update com.android.tools.build:gradl:

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'
  }

And add this in your gradle.properties file

android.useAndroidX=true
android.enableJetifier=true

ERROR: [TAG] Failed to resolve variable '${animal.sniffer.version}'

ERROR: [TAG] Failed to resolve variable '${junit.version}'

In case of above error

  1. File -> Invalidate Caches / restart
  2. Build -> Clean project

error: package android.support.annotation does not exist error: cannot find symbol class Nullable

In case of above error

Add implementation 'androidx.annotation:annotation:1.1.0'

change import android.support.annotation.Nullable; => androidx.annotation.Nullable;

change import android.support.annotation.NonNull; => androidx.annotation.NonNull;

Compile version and target version should be 28.

8
  • @HussainSherwani Could you update classpath 'com.android.tools.build:gradle:3.2.1' ? Commented Jun 18, 2019 at 6:35
  • classpath is already updated which is classpath 'com.android.tools.build:gradle:3.3.1' Commented Jun 18, 2019 at 6:42
  • @HussainSherwani Add this in your gradle.properties file android.useAndroidX=true android.enableJetifier=true Commented Jun 18, 2019 at 6:44
  • thanks mate for helping but this will not work as due to these line those libraries not using androidx package will not compile like after adding these lines I am getting issue in @react-native-community_netinfo library which is using android package instead of androidx Commented Jun 18, 2019 at 6:51
  • @HussainSherwani Did you add a library of real-native-commonity_netinfo? Commented Jun 18, 2019 at 7:03
5

Add 'tools:replace="android:appComponentFactory"' in your AndroidManifest.xml inside <application> tag

Your AndroidManifest.xml

<?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="ru.chopcode.myapplication">

    <application
        tools:replace="android:appComponentFactory"
        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">
   </application>

0
4

Downgrade Google Play service version. In android/app/build.gradle change

compile 'com.google.android.gms:play-services-<service_name>:+'

to

compile 'com.google.android.gms:play-services-<service_name>:16.0.0'

So in my case < sevice_name > was location. But in someone's else case it may be any other Google Play Service (like in list here http://www.androiddocs.com/google/play-services/setup.html).

1
  • Downgrading google play service version worked for me! Thanks
    – makezi
    Commented Jun 19, 2019 at 23:45
3

After spending a whole day on this issue. Finally, I have resolved this issue.

I got that error from react-native-device-info and react-native-fast-image library. I just remove that library from package.json file and then install

"react-native-device-info": "^2.1.2", "react-native-fast-image": "^6.0.3" this latest version

I have used below gradle version

classpath 'com.android.tools.build:gradle:3.3.1'

I have used below properties version

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

I have used below versions

buildToolsVersion = "28.0.3"
minSdkVersion = 16
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
2

This answer should help most people. If it still does not then the way to solve this (which is not that good) is that you open the android project in android studio. That should fetch all the gradle files. On the right side the view should be android.

enter image description here

From here just check each gradle build file for a + sign ahead of google play services or firebase services or any such library. This has also been explained in this answer.

After which you either change it like explained in the answer above. like so.

implementation(project(":react-native-admob"),  {
        exclude group: "com.google.android.gms"
})
implementation "com.google.android.gms:play-services-ads:16.0.0"

Or you provide a variable if the library is using one or as a last resort change it there itself.

The reason I put it here is so that any newbie who is sick of this error which randomly appeared out of nowhere all of a sudden can solve it effectively and not...die. lol.

2

I had the same problem, just upgrade react-native-device-info and run the following command

npm upgrade react-native-device-info@latest
react-native run-android
0
2

According to @Frank's answer the library used services-gcm:+ as a dependency, and the latest gcm version caused this problem.

And I had used :react-native-admob in my project. So I just change the following lines in android/app/build.gradle

From:

implementation project(':react-native-admob')

TO :

implementation(project(":react-native-admob"),  {
        exclude group: "com.google.android.gms"
})
implementation "com.google.android.gms:play-services-ads:16.0.0"
1

If you are not using react-native-device-info, but have the same error, its probably another library in your project.

Use this to find the library in question:

cd your-react-native-project/android
./gradlew app:dependencies > deps.txt

Then inspect the deps.txt file for keyword "androidx". Then you can quickly find which native module is using it.

In my case it was react-native-camera, for which solution above was good but not enough so I had to add this to local.properties:

firebaseVersion=17.6.0
googlePlayServicesVersion=16.1.0
googlePlayServicesVisionVersion=16.2.0

EDIT: After these fixes, running ./gradlew app:dependencies > deps.txt and searching for "androidx" returned no results - this is what we are looking for.

After running clean on the project, build worked.

1

Upgrading react-native-device-info to version 2.1.2 Fix my problem

1

Google play services breaking changes. See Release Notes.

The simple way to resolve this issue is just changing the version of Google play services.

Change all com.google.android.gms:play-services-* dependencies to version 16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.