diff gara/android/firebase-cloud-messaging/README.md @ 47:829623189a57

[Gara] Android commit. Bazelfied it.
author MrJuneJune <me@mrjunejune.com>
date Sat, 13 Dec 2025 14:20:34 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gara/android/firebase-cloud-messaging/README.md	Sat Dec 13 14:20:34 2025 -0800
@@ -0,0 +1,96 @@
+
+# Bazel Firebase Cloud Messaging (FCM) example
+
+FCM requires certain information about your app (API key, app ID, project id,
+etc) to be present in the `res/values/values.xml` resource file. This example
+shows how to use the tools provided in the
+[bazelbuild/tools_android](https://github.com/bazelbuild/tools_android) repo to
+generate the `values.xml` file from the `google-services.json` file from your
+Firebase console.
+
+## Building the Example
+
+To build the example:
+
+1. Make sure the `ANDROID_HOME` environment variable is set to the absolute path
+   of your Android SDK.
+
+2. Go to the Firebase console for your project, and in Settings, download
+   `google-service.json`, and replace the sample file in the `app` directory.
+
+3. Run `bazel build //app` in the project.
+
+## Applying the Example to Your Code
+
+To apply this example to your code:
+
+1. Add the following to your `WORKSPACE` file:
+```python
+TOOLS_ANDROID_VERSION = "0.1"
+http_archive(
+  name = "tools_android",
+  strip_prefix = "tools_android-" + TOOLS_ANDROID_VERSION,
+  url = "https://github.com/bazelbuild/tools_android/archive/%s.tar.gz" % TOOLS_ANDROID_VERSION,
+)
+load("@tools_android//tools/googleservices:defs.bzl", "google_services_workspace_dependencies")
+google_services_workspace_dependencies()
+```
+
+2. Add the following to your `BUILD` file:
+```python
+load("@tools_android//tools/googleservices:defs.bzl", "google_services_xml")
+
+GOOGLE_SERVICES_XML = google_services_xml(
+  package_name = "com.example.myapplication",
+  google_services_json = "google-services.json"
+)
+```
+
+3. Add `GOOGLE_SERVICES_XML` to the `resource_files` attribute of your
+   `android_binary` rule. For example:
+```python
+android_binary(
+  ...
+  resource_files = glob(["src/main/res/**"]) + GOOGLE_SERVICES_XML,
+  ...
+)
+```
+
+4. Bazel's `AndroidManifest.xml` merging logic does not merge permissions from
+   dependent libraries (see issue [#5411](https://github.com/bazelbuild/bazel/issues/5411)).
+   You may need to add the following permissions to the `AndroidManifest.xml` of
+   your top-level `android_binary` rule:
+```xml
+<uses-permission android:name="android.permission.INTERNET" />
+<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+<uses-permission android:name="android.permission.WAKE_LOCK" />
+<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
+```
+
+## Manual Integration
+
+It's also possible to run the Google Services values.xml generator manually and
+add the results to your project:
+
+1. Go to the Firebase console for your project, and in Settings, download
+   `google-service.json`.
+
+2. From the workspace root of the `tools_android` project, run the Google
+   Services XML generator:
+```
+  bazel run //third_party/googleservices:GenerateGoogleServicesXml -- \
+     com.example.myapplication \
+     /absolute/path/to/google-services.json \
+     /tmp/values.xml
+```
+   The arguments are the package name for your app, the absolute file path to  
+   the `google-services.json` file, and finally the file path for `values.xml`.
+
+3. Merge the resulting `values.xml` file into your `values.xml` file (or put the
+   file into your `res/values` directory if you don't already have a
+   `values.xml` file). Alternatively, the `values.xml` file can be put into a
+   separate `res/values` directory and added to the `resource_files`. For the
+   example here, if `values.xml` is in
+   `app/src/main/google_services_xml/res/values/values.xml`, the `BUILD` file
+   would have
+   `resource_files = glob(["src/main/res/**"]) + ["src/main/google_services_xml/res/values/values.xml"],`.