Androidアプリをビルドした際、次のエラーが表示されることがあります。
No matching client found for package name 'com.example.app'
FlutterやReact Nativeでも、Android版のGradleビルド中に同じエラーが発生します。
このエラーは、現在ビルドしているアプリの最終applicationIdと、google-services.json内のpackage_nameが一致していないことを示します。
エラーが発生する仕組み
GoogleサービスGradleプラグインは、google-services.json内の各clientを確認し、現在のアプリケーションIDと一致するpackage_nameを探します。
Android側:
android {
defaultConfig {
applicationId = "com.example.app"
}
}
JSON側:
"android_client_info": {
"package_name": "com.example.app"
}
この2つが完全一致すれば、対応するFirebase設定が選択されます。
最短の修正手順
- エラー文に表示されたパッケージ名をコピーする
- アプリレベルGradleの
applicationIdを確認する applicationIdSuffixとproduct flavorを確認するgoogle-services.json内でpackage_nameを検索する- 完全一致する値がなければFirebaseへAndroidアプリを追加する
- 正式な
google-services.jsonを再取得する - 正しいアプリモジュールまたはflavorへ配置する
- クリーンビルドする
原因1:Firebaseへ違うパッケージ名を登録した
例:
実際のapplicationId:
com.example.todoapp
Firebase登録:
com.example.todo
Firebaseへ登録済みのAndroidアプリのパッケージ名は、後から書き換えるのではなく、正しいパッケージ名で新しいAndroidアプリを追加します。
原因2:applicationIdSuffixが付いている
次の設定では、debug版の最終IDが変わります。
android {
defaultConfig {
applicationId = "com.example.app"
}
buildTypes {
getByName("debug") {
applicationIdSuffix = ".debug"
}
}
}
最終的なID:
release: com.example.app
debug: com.example.app.debug
Firebaseにcom.example.appしか登録していない場合、debugビルドでエラーになります。
原因3:product flavorでIDが変わる
flavorDimensions += "environment"
productFlavors {
create("development") {
dimension = "environment"
applicationIdSuffix = ".dev"
}
create("production") {
dimension = "environment"
}
}
この場合、Firebaseへ次の2アプリを登録します。
com.example.app.dev
com.example.app
使用するflavorごとに対応するgoogle-services.jsonを配置します。
app/src/development/google-services.json
app/src/production/google-services.json
namespaceとapplicationIdを混同しない
現在のAndroidプロジェクトでは、namespaceとapplicationIdを別々に設定できます。
android {
namespace = "com.example.app.code"
defaultConfig {
applicationId = "com.example.app"
}
}
Firebaseへ登録するのは、通常namespaceではなく最終的なapplicationIdです。
AndroidManifest.xmlだけを見ない
古いプロジェクトではManifestのpackage属性が使われていましたが、現在のアプリ識別子はGradleのapplicationIdを基準に確認します。
確認順:
defaultConfig.applicationId- build typeの
applicationIdSuffix - product flavorの設定
- エラー文に表示された最終ID
エラー文のパッケージ名は、プラグインが照合しようとした実際の値として有用です。
JSONを手作業で書き換えない
package_nameだけを書き換えると、一見ビルドが進むように見える場合があります。
しかし、google-services.jsonには次の情報も含まれます。
- FirebaseアプリID
- OAuthクライアント
- APIキー
- プロジェクト番号
正しいパッケージ名でFirebase Androidアプリを登録し、正式なファイルを取得してください。
Flutterで発生する場合
確認場所:
android/app/build.gradle
android/app/google-services.json
またはKotlin DSLの場合:
android/app/build.gradle.kts
確認項目:
applicationId- flavorとsuffix
android/app/google-services.jsonflutterfire configureで選んだFirebaseプロジェクト
クリーンだけではパッケージ名の不一致は直りません。先に登録情報を一致させます。
CIだけ失敗する場合
ローカルとCIで異なるvariantをビルドしていないか確認します。
ローカル: developmentRelease
CI: productionRelease
また、CIで復元しているgoogle-services.jsonが別環境用ではないか、出力先が正しいかも確認してください。
修正後の確認
./gradlew clean
./gradlew assembleDebug
Flutter:
flutter clean
flutter pub get
flutter run
Google Play用AABを作る場合は、正しいproduction variantとversionCodeを確認します。
まとめ
No matching client found for package nameで確認する値は次の2つです。
最終applicationId
=
google-services.json内のpackage_name
特に、namespace、debug suffix、product flavor、CIのbuild variantを見落とさないようにしてください。
一次情報
公式参考資料
Google PlayやFirebaseの画面・要件は変更される場合があります。公開作業の前に、リンク先の最新情報も確認してください。