[解決済み] google-services.jsonって実際何してるの?
質問
現在使用しているアプリに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 {
関連
-
[解決済み】パッケージ名(Google Analytics)に一致するクライアントが見つからない - 複数のproductFlavorsとbuildTypes
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】google-services.jsonで異なるproductFlavorsを指定する場合
-
[解決済み】LogCatメッセージ。Google Play サービスのリソースが見つかりませんでした。プロジェクトの構成を確認し、リソースが含まれていることを確認してください。
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] FABアイコンの色を設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】google-services.jsonで異なるproductFlavorsを指定する場合
-
[解決済み] android: imageview の画像を画面に合わせて伸縮させる
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?