transistorsoft / react-native-background-geolocation

Sophisticated, battery-conscious background-geolocation with motion-detection
http://shop.transistorsoft.com/pages/react-native-background-geolocation
MIT License
2.54k stars 424 forks source link

java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.FusedLocationProviderClient, but class was expected #1968

Closed FernandezEnrique closed 1 month ago

FernandezEnrique commented 1 month ago

Your Environment

Expected Behavior

Run without any error

Actual Behavior

Crashes without any error

Steps to Reproduce

1. 2. 3. 4.

Context

I am trying to install this plugin but it crashes

Debug logs

Logs ``` 03-18 00:01:55.787 9398 9499 E HMSSDK_HMSPackageManager: PackagePriorityInfo list is null 03-18 00:01:55.790 9398 9499 E HMSSDK_HMSPackageManager: Failed to find HMS apk 03-18 00:01:55.795 9398 9485 E OpenGLRenderer: Unable to match the desired swap behavior. 03-18 00:01:55.806 9398 9499 E HMSSDK_HMSPackageManager: resolveInfoList is null or empty 03-18 00:01:55.814 9398 9499 E HMSSDK_HMSPackageManager: PackagePriorityInfo list is null 03-18 00:01:55.818 9398 9499 E HMSSDK_HMSPackageManager: Failed to find HMS apk 03-18 00:01:56.144 1040 1098 E OpenGLRenderer: Unable to match the desired swap behavior. 03-18 00:01:58.215 594 3724 E TaskPersister: File error accessing recents directory (directory doesn't exist?). 03-18 00:01:59.813 9398 9528 E unknown:UIManagerModuleConstantsHelper: Direct event name for 'RNSScreen' doesn't correspond to the naming convention, expected 'topEventName'->'onEventName', got 'topHeaderBackButtonClickedEvent'->'onHeaderBackButtonClicked' 03-18 00:02:01.148 9398 9527 E unknown:UIManagerModuleConstantsHelper: Direct event name for 'RNSScreen' doesn't correspond to the naming convention, expected 'topEventName'->'onEventName', got 'topHeaderBackButtonClickedEvent'->'onHeaderBackButtonClicked' 03-18 00:02:05.832 9398 9506 E AndroidRuntime: FATAL EXCEPTION: pool-3-thread-2 03-18 00:02:05.832 9398 9506 E AndroidRuntime: Process: com.app, PID: 9398 03-18 00:02:05.832 9398 9506 E AndroidRuntime: java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.FusedLocationProviderClient, but class was expected (declaration of 'com.google.android.gms.location.FusedLocationProviderClient' appears in /data/app/~~xEJnVQ_kw1uAs4BAPmobpA==/com.app-LN4qKPkyNM26nfItkWxUew==/base.apk!classes6.dex) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.xms.g.location.FusedLocationProviderClient.removeLocationUpdates(Unknown Source:50) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.locationmanager.location.TSLocationManager.d(Unknown Source:40) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.locationmanager.location.TSLocationManager.stopUpdatingLocation(Unknown Source:0) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.locationmanager.location.TSLocationManager.stop(Unknown Source:0) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.locationmanager.service.TrackingService.stop(Unknown Source:83) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.locationmanager.adapter.BackgroundGeolocation.c(Unknown Source:2) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.locationmanager.adapter.BackgroundGeolocation.$r8$lambda$oSDeWXxQl1jmikdjYQwff60damw(Unknown Source:0) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at com.transistorsoft.locationmanager.adapter.BackgroundGeolocation$$ExternalSyntheticLambda1.run(Unknown Source:4) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 03-18 00:02:05.832 9398 9506 E AndroidRuntime: at java.lang.Thread.run(Thread.java:1012) 03-18 00:02:05.846 9398 9506 E TSLocationManager: [c.t.l.a.BackgroundGeolocation$w0 uncaughtException] 03-18 00:02:05.846 9398 9506 E TSLocationManager: ‼️ Uncaught Exception: Found interface com.google.android.gms.location.FusedLocationProviderClient, but class was expected (declaration of 'com.google.android.gms.location.FusedLocationProviderClient' appears in /data/app/~~xEJnVQ_kw1uAs4BAPmobpA==/com.app-LN4qKPkyNM26nfItkWxUew==/base.apk!classes6.dex) 03-18 00:02:05.846 9398 9506 E TSLocationManager: {"activityRecognitionInterval":10000,"allowIdenticalLocations":false,"authorization":{},"autoSync":true,"autoSyncThreshold":0,"backgroundPermissionRationale":{"title":"Allow {applicationName} to access this device's location even when closed or not in use?","message":"[CHANGEME] This app collects location data for FEATURE X and FEATURE Y.","positiveAction":"Change to \"{backgroundPermissionOptionLabel}\"","negativeAction":""},"batchSync":false,"configUrl":"","debug":true,"deferTime":0,"desiredAccuracy":-1,"desiredOdometerAccuracy":100,"disableAutoSyncOnCellular":false,"disableElasticity":false,"disableLocationAuthorizationAlert":false,"disableMotionActivityUpdates":false,"disableProviderChangeRecord":false,"disableStopDetection":false,"distanceFilter":10,"elasticityMultiplier":1,"enableHeadless":false,"enableTimestampMeta":false,"extras":{},"fastestLocationUpdateInterval":-1,"foregroundService":true,"geofenceInitialTriggerEntry":true,"geofenceModeHighAccuracy":false,"geofenceProximityRadius":1000,"geofenceTemplate":"","headers":{"X-FOO":"bar"},"headlessJobService":"com.transistorsoft.rnbackgroundgeolocation.HeadlessTask","heartbeatInterval":-1,"httpRootProperty":"location","httpTimeout":60000,"isMoving":false,"locationAuthorizationRequest":"Always","locationTemplate":"","locationTimeout":60,"locationUpdateInterval":1000,"locationsOrderDirection":"ASC","logLevel":5,"logMaxDays":3,"maxBatchSize":-1,"maxDaysToPersist":1,"maxMonitoredGeofences":97,"maxRecordsToPersist":-1,"method":"POST","minimumActivityRecognitionConfidence":75,"motionTriggerDelay":0,"notification":{"layout":"","title":"","text":"Location Service activated","color":"","channelName":"TSLocationManager","channelId":"","smallIcon":"","largeIcon":"","priority":-1,"sticky":false,"strings":{},"actions":[]},"params":{"auth_token":"maybe_your_server_authenticates_via_token_YES?"},"persist":true,"persistMode":2,"schedule":[],"scheduleUseAlarmManager":false,"speedJumpFilter":300,"startOnBoot":true,"stationaryRadius":25,"stopAfterElapsedMinutes":0,"stopOnStationary":false,"stopOnTerminate":false,"stopTimeout":5,"triggerActivities":"in_vehicle, on_bicycle, on_foot, running, walking","url":"http:\/\/yourserver.com\/locations","useSignificantChangesOnly":false,"enabled":false,"schedulerEnabled":false,"trackingMode":1,"odometer":0,"isFirstBoot":false,"didLaunchInBackground":false,"didDeviceReboot":false} 03-18 00:02:05.846 9398 9506 E TSLocationManager: java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.FusedLocationProviderClient, but class was expected (declaration of 'com.google.android.gms.location.FusedLocationProviderClient' appears in /data/app/~~xEJnVQ_kw1uAs4BAPmobpA==/com.app-LN4qKPkyNM26nfItkWxUew==/base.apk!classes6.dex) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.xms.g.location.FusedLocationProviderClient.removeLocationUpdates(Unknown Source:50) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.locationmanager.location.TSLocationManager.d(Unknown Source:40) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.locationmanager.location.TSLocationManager.stopUpdatingLocation(Unknown Source:0) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.locationmanager.location.TSLocationManager.stop(Unknown Source:0) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.locationmanager.service.TrackingService.stop(Unknown Source:83) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.locationmanager.adapter.BackgroundGeolocation.c(Unknown Source:2) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.locationmanager.adapter.BackgroundGeolocation.$r8$lambda$oSDeWXxQl1jmikdjYQwff60damw(Unknown Source:0) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at com.transistorsoft.locationmanager.adapter.BackgroundGeolocation$$ExternalSyntheticLambda1.run(Unknown Source:4) 03-18 00:02:05.846 9398 9506 E TSLocationManager: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 03-18 00:02:05.847 9398 9506 E TSLocationManager: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 03-18 00:02:05.847 9398 9506 E TSLocationManager: at java.lang.Thread.run(Thread.java:1012) 03-18 00:02:05.991 1336 2159 E OpenGLRenderer: Unable to match the desired swap behavior. 03-18 00:02:06.002 2251 2686 E OpenGLRenderer: Unable to match the desired swap behavior. 03-18 00:02:06.760 392 392 E BpTransactionCompletedListener: Failed to transact (-32) ```
christocracy commented 1 month ago

Search issues BEFORE posting.

Duplicate #1710

FernandezEnrique commented 1 month ago

I had already checked it but all answers are about playServicesLocationVersion in bluild.gradle and can't find a solution for me

I am sending build.gradle and app/build.gradle

android/build.gradle ``` buildscript { ext { buildToolsVersion = "34.0.0" minSdkVersion = 21 compileSdkVersion = 34 targetSdkVersion = 34 ndkVersion = "25.1.8937393" kotlinVersion = "1.8.0" appCompatVersion = "1.4.2" googlePlayServicesVersion = "21.0.1" } repositories { google() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") } } allprojects { repositories { maven { // react-native-background-fetch url("${project(':react-native-background-fetch').projectDir}/libs") } maven { // Required for react-native-background-geolocation url("${project(':react-native-background-geolocation').projectDir}/libs") } maven { // Required for react-native-background-fetch url("${project(':react-native-background-fetch').projectDir}/libs") } } } apply plugin: "com.facebook.react.rootproject" ```
android/app/build.gradle ``` apply plugin: "com.android.application" apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" // background-geolocation Project background_geolocation = project(':react-native-background-geolocation') apply from: "${background_geolocation.projectDir}/app.gradle" /** * This is the configuration block to customize your React Native Android app. * By default you don't need to apply any configuration, just uncomment the lines you need. */ react { /* Folders */ // The root of your project, i.e. where "package.json" lives. Default is '..' // root = file("../") // The folder where the react-native NPM package is. Default is ../node_modules/react-native // reactNativeDir = file("../node_modules/react-native") // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen // codegenDir = file("../node_modules/@react-native/codegen") // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js // cliFile = file("../node_modules/react-native/cli.js") /* Variants */ // The list of variants to that are debuggable. For those we're going to // skip the bundling of the JS bundle and the assets. By default is just 'debug'. // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. // debuggableVariants = ["liteDebug", "prodDebug"] /* Bundling */ // A list containing the node command and its flags. Default is just 'node'. // nodeExecutableAndArgs = ["node"] // // The command to run when bundling. By default is 'bundle' // bundleCommand = "ram-bundle" // // The path to the CLI configuration file. Default is empty. // bundleConfig = file(../rn-cli.config.js) // // The name of the generated asset file containing your JS bundle // bundleAssetName = "MyApplication.android.bundle" // // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' // entryFile = file("../js/MyApplication.android.js") // // A list of extra flags to pass to the 'bundle' commands. // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle // extraPackagerArgs = [] /* Hermes Commands */ // The hermes compiler command to run. By default it is 'hermesc' // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" // // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] } /** * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ def enableProguardInReleaseBuilds = false /** * The preferred build flavor of JavaScriptCore (JSC) * * For example, to use the international variant, you can use: * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` * * The international variant includes ICU i18n library and necessary data * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ def jscFlavor = 'org.webkit:android-jsc:+' android { ndkVersion rootProject.ext.ndkVersion buildToolsVersion rootProject.ext.buildToolsVersion compileSdk rootProject.ext.compileSdkVersion namespace "com.app" defaultConfig { applicationId "com.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" } signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } } buildTypes { debug { signingConfig signingConfigs.debug } release { // Caution! In production, you need to generate your own keystore file. // see https://reactnative.dev/docs/signed-apk-android. signingConfig signingConfigs.debug minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } } dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") implementation("com.facebook.react:flipper-integration") implementation("com.google.android.gms:play-services-location:21.0.1") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { implementation jscFlavor } } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) // Font for react-native-vector-icons apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" ```
christocracy commented 1 month ago

Then one of your other plug-ins is at fault.

analyze your dependencies to find out which one is importing play-services-location < v21

$ cd android
$ ./gradlew app:dependencies
christocracy commented 1 month ago

Btw (unrelated): why are you defining the maven url for background-fetch twice?

FernandezEnrique commented 1 month ago

Thank you for answering so quickly.

I just copied it from another issue by mistake, deleting that is still the same error.

Result of running ./gradlew app:dependencies | grep play-services-location

$ ./gradlew app:dependencies | grep play-services-location
+--- com.google.android.gms:play-services-location:21.0.1
+--- com.google.android.gms:play-services-location:21.0.1
+--- com.google.android.gms:play-services-location:{strictly 21.0.1} -> 21.0.1 (c)
+--- com.google.android.gms:play-services-location:21.0.1
|    +--- com.google.android.gms:play-services-location:20.0.0 -> 21.0.1 (*)
|    +--- com.google.android.gms:play-services-location:21.0.1 (*)
+--- com.google.android.gms:play-services-location:21.0.1
+--- com.google.android.gms:play-services-location:{strictly 21.0.1} -> 21.0.1 (c)
+--- com.google.android.gms:play-services-location:21.0.1
|    +--- com.google.android.gms:play-services-location:20.0.0 -> 21.0.1 (*)
|    +--- com.google.android.gms:play-services-location:21.0.1 (*)
+--- com.google.android.gms:play-services-location:21.0.1 (n)
+--- com.google.android.gms:play-services-location:21.0.1
+--- com.google.android.gms:play-services-location:21.0.1
+--- com.google.android.gms:play-services-location:{strictly 21.0.1} -> 21.0.1 (c)
+--- com.google.android.gms:play-services-location:21.0.1
|    +--- com.google.android.gms:play-services-location:20.0.0 -> 21.0.1 (*)
|    +--- com.google.android.gms:play-services-location:21.0.1 (*)
+--- com.google.android.gms:play-services-location:21.0.1
+--- com.google.android.gms:play-services-location:{strictly 21.0.1} -> 21.0.1 (c)
+--- com.google.android.gms:play-services-location:21.0.1
|    +--- com.google.android.gms:play-services-location:20.0.0 -> 21.0.1 (*)
|    +--- com.google.android.gms:play-services-location:21.0.1 (*)
christocracy commented 1 month ago

Now analyze it yourself to determine which of your other plug-ins is importing v20.

The plug-in is not at-fault here.

FernandezEnrique commented 1 month ago

The only plug-in that is trying to import v20 is react-native-background-geolocation

Or am I wrong?

This result appears 4 times.

+--- project :react-native-background-geolocation
|    +--- com.transistorsoft:tslocationmanager:+ -> 3.5.4
|    +--- com.facebook.react:react-native:+ -> com.facebook.react:react-android:0.73.3 (*)
|    +--- androidx.appcompat:appcompat:1.4.2 -> 1.6.1 (*)
|    +--- com.google.android.gms:play-services-location:20.0.0 -> 21.0.1 (*)

The current version of react-native-background-geolocation is 4.15.1

christocracy commented 1 month ago

Go back to the Android Setup Instructions and carefully compare what you have in your gradle file:

googlePlayServicesVersion

Compared to what the Setup Instructions directed you to do.

FernandezEnrique commented 1 month ago

Just have done this again from scratch exactly as it but still the same error.

Do you need me to send gradle files again or anything else?

christocracy commented 1 month ago

Do you need me to send gradle files again or anything

Yes.

FernandezEnrique commented 1 month ago
build.gradle ``` buildscript { ext { buildToolsVersion = "34.0.0" minSdkVersion = 21 compileSdkVersion = 34 targetSdkVersion = 34 ndkVersion = "25.1.8937393" kotlinVersion = "1.8.0" appCompatVersion = "1.4.2" googlePlayServicesVersion = "21.0.1" } repositories { google() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") } } allprojects { repositories { mavenLocal() // Required for react-native-background-geolocation maven { url("${project(':react-native-background-geolocation').projectDir}/libs") } maven { url 'https://developer.huawei.com/repo/' } // Required for react-native-background-fetch maven { url("${project(':react-native-background-fetch').projectDir}/libs") } } } apply plugin: "com.facebook.react.rootproject" ```
app/build.gradle ``` apply plugin: "com.android.application" apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" // background-geolocation Project background_geolocation = project(':react-native-background-geolocation') apply from: "${background_geolocation.projectDir}/app.gradle" /** * This is the configuration block to customize your React Native Android app. * By default you don't need to apply any configuration, just uncomment the lines you need. */ react { /* Folders */ // The root of your project, i.e. where "package.json" lives. Default is '..' // root = file("../") // The folder where the react-native NPM package is. Default is ../node_modules/react-native // reactNativeDir = file("../node_modules/react-native") // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen // codegenDir = file("../node_modules/@react-native/codegen") // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js // cliFile = file("../node_modules/react-native/cli.js") /* Variants */ // The list of variants to that are debuggable. For those we're going to // skip the bundling of the JS bundle and the assets. By default is just 'debug'. // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. // debuggableVariants = ["liteDebug", "prodDebug"] /* Bundling */ // A list containing the node command and its flags. Default is just 'node'. // nodeExecutableAndArgs = ["node"] // // The command to run when bundling. By default is 'bundle' // bundleCommand = "ram-bundle" // // The path to the CLI configuration file. Default is empty. // bundleConfig = file(../rn-cli.config.js) // // The name of the generated asset file containing your JS bundle // bundleAssetName = "MyApplication.android.bundle" // // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' // entryFile = file("../js/MyApplication.android.js") // // A list of extra flags to pass to the 'bundle' commands. // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle // extraPackagerArgs = [] /* Hermes Commands */ // The hermes compiler command to run. By default it is 'hermesc' // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" // // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] } /** * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ def enableProguardInReleaseBuilds = false /** * The preferred build flavor of JavaScriptCore (JSC) * * For example, to use the international variant, you can use: * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` * * The international variant includes ICU i18n library and necessary data * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ def jscFlavor = 'org.webkit:android-jsc:+' android { ndkVersion rootProject.ext.ndkVersion buildToolsVersion rootProject.ext.buildToolsVersion compileSdk rootProject.ext.compileSdkVersion namespace "com.app" defaultConfig { applicationId "com.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" } signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } } buildTypes { debug { signingConfig signingConfigs.debug } release { // Caution! In production, you need to generate your own keystore file. // see https://reactnative.dev/docs/signed-apk-android. signingConfig signingConfigs.debug minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } } dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") implementation("com.facebook.react:flipper-integration") implementation("com.google.android.gms:play-services-location:21.0.1") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { implementation jscFlavor } } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) // Font for react-native-vector-icons apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" ```
christocracy commented 1 month ago

googlePlayServicesVersion = "21.0.1"

Congratulations, you made the same mistake twice.

I want you to look at what you entered into your gradle file and read each word out loud to yourself.

googlePlayServicesVersion

"google"
"play"
"services"
"version"

Now read out loud what the Setup Instructions direct you to add:

Screenshot 2024-03-17 at 9 19 48 PM

Use "copy/paste" and don't trust your own brain and fingers.

FernandezEnrique commented 1 month ago

Oh my god, you are right, it's pretty late here (2 am)

Thank you and sorry for the inconvenience.