handle-gradle-dependencies-clash.mo
You have 2 dependencies that depend on different versions of the same package, so your Android build will fail with an error like:
com.android.dex.DexException: Multiple dex files define google/android/play-services/iid/R$anim;
First, you need to figure out which package is causing the dependency issue.
Versions conflicts break your build when one method is present in one version and not in another.
N.B.: You can potentially have versions conflicts without any issue. Similarly your build can pass but you can still have issues if the logic inside a function has been changed.
Look at your error to know exactly which package is causing the issue (in the previous example it's probably
com.google.android.gms:play-services-iid
)Then you must find out which version should be set.
To do so, run
cd android && ./gradlew app:dependencies && cd ..
. This will print out your tree of dependencies.In there, you must look for two instances of the dependency but with different versions. For example if it returns:
_debugCompile - ## Internal use, do not manually configure ##
+--- project :react-native-maps
| +--- com.google.android.gms:play-services-base:11.1.6
| \--- com.google.android.gms:play-services-basement:11.1.6
+--- com.salesforce.marketingcloud:marketingcloudsdk:5.3.+ -> 5.3.1
| +--- com.google.android.gms:play-services-gcm:11.0.1 -> 11.1.6
| | \--- com.google.android.gms:play-services-iid:11.0.1 -> 11.1.6
| | +--- com.google.android.gms:play-services-base:11.0.1 -> 11.1.6 (*)
| | \--- com.google.android.gms:play-services-basement:11.0.1 -> 11.1.6 (*)
A quick note on how to read this tree:
(*)
indicates that this lib is already installed higher in the tree->
indicates that a different version of the library was installed
You can see here for example that
com.google.android.gms:play-services-base
version is 11.1.6 for react-native-maps
and version 11.0.1 for com.salesforce.marketingcloud:marketingcloudsdk
, therefore forcing com.google.android.gms:play-services-iid
to be at version 11.1.6.If the highest version of the dependency does not work, your next guess has to be the lowest one required by your dependencies.
So now in your
android/app/build.gradle
you need to:- Tell
react-native-maps
not to compilecom.google.android.gms:play-services-base
:compile(project(':react-native-maps')){exclude group: 'com.google.android.gms', module: 'play-services-base'} - Tell
com.salesforce.marketingcloud:marketingcloudsdk
not to compilecom.google.android.gms:play-services-base
:compile('com.salesforce.marketingcloud:marketingcloudsdk:5.3.+') {exclude group: 'com.google.android.gms', module: 'play-services-base'} - Force the version of
com.google.android.gms:play-services-base
to be the lowest one, i.e. 11.0.1:compile ("com.google.android.gms:play-services-base:11.0.1") {force = true;} - Run
cd android && ./gradlew clean && cd ..
to update the dependencies
Check: your dependency tree should look like this:
_debugCompile - ## Internal use, do not manually configure ##
+--- project :react-native-maps
+--- com.salesforce.marketingcloud:marketingcloudsdk:5.3.+ -> 5.3.1
| +--- com.google.android.gms:play-services-gcm:11.0.1
| | \--- com.google.android.gms:play-services-iid:11.0.1
| | +--- com.google.android.gms:play-services-base:11.0.1 (*)
| | \--- com.google.android.gms:play-services-basement:11.0.1 (*)
+--- com.google.android.gms:play-services-maps:11.0.1
| +--- com.google.android.gms:play-services-base:11.0.1 (*)
| \--- com.google.android.gms:play-services-basement:11.0.1 (*)
+--- com.google.android.gms:play-services-base:11.0.1 (*)
Note that now
com.google.android.gms:play-services-base
's version is 11.0.1Check: when you launch your build it either passes or error with a different error
It's possible that the lib you've downgraded relies on a version of another lib that conflicts with another dependency so you will have to repeat this with this new dependency until your build passes :)
It's also possible that the lowest version does not have a method required by the highest version. In this case you can try a version between the two that works. It's possible that there is no version that works.
Last modified 5yr ago