TestCrew
Firebase and Android Setup

How to Fix No Matching Client Found for Package Name

Fix the Firebase Android package-name error by checking applicationId, google-services.json, build types, product flavors, and CI build variants.

Published
August 2, 2026
Updated
August 5, 2026
Official info checked
August 2, 2026
TestCrew guide cover for checking applicationId against the Firebase package name

An Android build may fail with the following message:

No matching client found for package name 'com.example.app'

The same error can appear while Gradle builds the Android part of a Flutter or React Native project.

It means that the app’s final applicationId does not match any package_name entry in the active google-services.json file.

How the error occurs

The Google Services Gradle Plugin reads each client entry in google-services.json and searches for one whose package name matches the current application ID.

Android configuration:

android {
    defaultConfig {
        applicationId = "com.example.app"
    }
}

Firebase configuration:

"android_client_info": {
  "package_name": "com.example.app"
}

The values must match exactly for the plugin to select the corresponding Firebase client configuration.

Fastest troubleshooting sequence

  1. Copy the package name shown in the error
  2. Check applicationId in the app-level Gradle file
  3. Check build-type and product-flavor suffixes
  4. Search google-services.json for package_name
  5. If no exact match exists, register the correct Android app in Firebase
  6. Download a new official google-services.json
  7. Place it in the correct app module or flavor source set
  8. Clean and rebuild

Cause 1: Firebase contains the wrong package name

Example:

Actual applicationId:
com.example.todoapp

Firebase registration:
com.example.todo

Do not try to rename an existing Firebase Android app by editing the downloaded file. Add a new Android app to the Firebase project using the correct package name, then download its configuration.

Cause 2: applicationIdSuffix changes the final ID

The following debug configuration produces a different package name:

android {
    defaultConfig {
        applicationId = "com.example.app"
    }

    buildTypes {
        getByName("debug") {
            applicationIdSuffix = ".debug"
        }
    }
}

Final IDs:

release: com.example.app
debug:   com.example.app.debug

If Firebase contains only com.example.app, the debug variant cannot find a matching client.

Register com.example.app.debug as a separate Firebase Android app when that variant uses Firebase.

Cause 3: A product flavor changes the ID

flavorDimensions += "environment"

productFlavors {
    create("development") {
        dimension = "environment"
        applicationIdSuffix = ".dev"
    }

    create("production") {
        dimension = "environment"
    }
}

Register both final IDs when both environments connect to Firebase:

com.example.app.dev
com.example.app

Place the matching configuration in each flavor source set:

app/src/development/google-services.json
app/src/production/google-services.json

Do not confuse namespace with applicationId

Modern Android projects can configure these values separately.

android {
    namespace = "com.example.app.code"

    defaultConfig {
        applicationId = "com.example.app"
    }
}

Firebase normally identifies the installed application by its final applicationId, not by the source-code namespace.

Do not rely only on AndroidManifest.xml

Older projects often used the Manifest package attribute, but current app identity should be verified from Gradle.

Use this order:

  1. defaultConfig.applicationId
  2. Build-type applicationIdSuffix
  3. Product-flavor configuration
  4. The final package name shown in the error

The package name printed by the plugin is valuable because it reflects the actual variant being processed.

Do not manually rewrite the JSON

Changing only package_name may appear to move the build forward, but the file contains other linked values:

  • Firebase app ID
  • OAuth clients
  • API keys
  • Project number
  • Other service configuration

Create the correct Android app registration and obtain a new official configuration instead of fabricating a match.

When the error occurs in Flutter

Check:

android/app/build.gradle
android/app/google-services.json

For Kotlin DSL:

android/app/build.gradle.kts

Review:

  • applicationId
  • Product flavors and suffixes
  • The JSON under android/app or the selected flavor directory
  • The Firebase project selected by flutterfire configure

A clean build alone cannot fix a registration mismatch. Correct the package and configuration first.

When only CI fails

Confirm that local development and CI build the same variant.

Local: developmentRelease
CI:    productionRelease

Also verify:

  • Which google-services.json CI restores
  • The restoration destination
  • The chosen Gradle or Flutter flavor
  • Whether production and development secrets are clearly separated

A valid development configuration still fails when CI builds the production package name.

Rebuild after correcting the configuration

Android:

./gradlew clean
./gradlew assembleDebug

Flutter:

flutter clean
flutter pub get
flutter run

For a Google Play AAB, confirm the production variant, final package name, signing configuration, and versionCode.

Summary

The central requirement is:

final applicationId
=
package_name in google-services.json

When troubleshooting, do not overlook namespace, debug suffixes, product flavors, or the build variant selected by CI.

For a broader explanation of the configuration file, see What Is google-services.json?.

Primary sources

Official references

Check the linked official documentation before a production release.

Continue reading

TestCrew

Find testers through mutual testing

Test other Android apps, provide useful feedback, and use earned credits to recruit testers for your own Google Play closed test.

Learn how TestCrew works

Analytics settings

TestCrew uses Google Analytics provided by Google LLC to improve the website. You can change whether it is used; this applies to future measurement on this page and later visits. See the Privacy Policy.