1. ホーム
  2. android

[解決済み] google-services.jsonって実際何してるの?

2022-08-02 11:33:27

質問

現在使用しているアプリにGoogle AnalyticsとGCMのサービスを追加する作業を行っています。 両方のサービスの実装に関するガイドで、google は開発者に、json ファイル google-services.json を生成し、アプリのルート ディレクトリの下に置くように求めています。

私は、アプリからこの json ファイルを削除しても、サービスはまだ動作することを発見しました。

ただ、確実に知りたいのは、このファイルは実際には何のためにあるのか、ということです。どのように使用し、どのように動作するのでしょうか。

どのように解決するのですか?

google-servicesプラグインとjsonについて少し調べてみたところ、このプラグインのソースが見つかりました。

まず最初に

classpathとapplyで参照されるgradle-plugin google-servicesは、ビルド時のみのプラグインです! つまり、アプリのビルドプロセスにのみ影響し、ランタイムプロセスには影響しません!

このプラグインは、あなたのアプリに素早くGoogle-servicesを統合するためのクイックスタート・ヘルパーとしてのみ意図されています。明らかに、このプロセスはやや複雑であり、文書化されていないため、Google はこのプロセスが何を行うかを明確にする必要がありました。

実際、私はプラグインのバージョン com.google.gms:google-services:1.4.0-beta3 のソース コードを見つけましたが、その中に appinvites に関する特定の参照は見つからず、App Invites のための Google API も見つけられませんでした!(ただし、プロジェクト ID で汎用 API プロジェクトを使用するだけかもしれませんが、私はこれを試していません)。

何をするのか

google-services gradle-pluginは、あなたのapp-moduleの中にあるgoogle-services.jsonを探します。そして、Google API 開発者コンソールによって生成された project-id や tracking-id などの設定を google-services.json ファイルで探します。 見つかった設定から、Androidのリソース値が以下のパスに生成されます。

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

例えば、アプリのデバッグビルドの場合。

app/build/generated/res/google-services/debug/values/values.xml

例:GCMのチュートリアルに従った場合、JSONファイルには以下のandroid-resourceのようにAPIプロジェクトのidが含まれます。

<string name="gcm_defaultSenderId">project-id</string>

このプラグインとJSONファイルは、アプリの実行や公開に不可欠なものではなく、特定のGoogle API機能を簡単に統合するための基本的なandroidリソースファイルを生成するためのクイックスタートヘルパーに過ぎません。

下記のソースコードで、google-servicesプラグインが、app/build.gradleで定義されたすべてのアプリバリアントに対して常にこれらのアンドロイドリソースを生成していることに注目してください。

もしそうしたくない場合は、必要なアプリバリアントでそれらの生成されたリソースを使用し、他のものを削除する必要があります。app/build.gradle から google-services plugin apply を削除することを忘れないでください、さもなければ、すべての app-variant に対して再生成されます。

できないこと

このプラグインとJSONファイルは、あなたのアプリのために言ったGoogle-機能の内部の動作に直接影響を与えることはありません! もしあなたがすでにGCMやGoogle Analyticsなどを統合する方法についてdeveloper.android.comの古いチュートリアルに従ったことがあるなら、あなたもgradle-plugin google-services または google-services.json ファイルのいずれかを統合する必要はありません!

ソースの入手先についてのお知らせ

google-services gradle-pluginを統合した後、プロジェクトを同期すると、Gradleは自動的にgoogle-servicesの依存関係を以下のようなパスにダウンロードします(Windowsでは、Linuxの場合はhome/.gradleを調べる必要があるかもしれません)。

C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services\1.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar

このjarファイルを展開すると、2つのファイルがあります。

GoogleServicesPlugin.groovy
GoogleServicesTask.java

のように、gradle-pluginのプレーンなソースコードが含まれています。

GoogleServicesPlugin.groovy

は、アプリバリアントの処理と、パスなどの基本的な定義を含んでいます。

GoogleServicesTask.java

は実際のタスク定義を含んでおり、それが実際に何をするのか見るために、次のメソッドを探します。

@TaskAction
public void action() throws IOException {