diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index aa7a6f730..e9ab9b242 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -155,3 +155,57 @@ tasks:
<<: *rules_flags
build_targets:
- "//java/com/basicapp:basic_app"
+ ubuntu2004_databinding:
+ name: "Databinding Basic app ubuntu"
+ platform: ubuntu2004
+ working_directory: examples/databinding
+ build_flags:
+ <<: *rules_flags
+ build_targets:
+ - "//java/com/basicapp:basic_app"
+ ubuntu2004_databinding_bzlmod:
+ name: "Databinding Basic app ubuntu bzlmod"
+ platform: ubuntu2004
+ working_directory: examples/databinding
+ build_flags:
+ <<: *rules_flags
+ ? "--enable_bzlmod"
+ ? "--enable_workspace=false"
+ build_targets:
+ - "//java/com/basicapp:basic_app"
+ macos_arm64_databinding:
+ name: "Databinding Basic app mac arm64"
+ platform: macos_arm64
+ working_directory: examples/databinding
+ build_flags:
+ <<: *rules_flags
+ build_targets:
+ - "//java/com/basicapp:basic_app"
+ macos_arm64_databinding_bzlmod:
+ name: "Databinding Basic app mac arm64 bzlmod"
+ platform: macos_arm64
+ working_directory: examples/databinding
+ build_flags:
+ <<: *rules_flags
+ ? "--enable_bzlmod"
+ ? "--enable_workspace=false"
+ build_targets:
+ - "//java/com/basicapp:basic_app"
+ windows_databinding_bzlmod:
+ name: "Databinding Basic app Windows Bzlmod"
+ platform: windows
+ working_directory: examples/databinding
+ build_flags:
+ <<: *rules_flags
+ ? "--enable_bzlmod"
+ ? "--enable_workspace=false"
+ build_targets:
+ - "//java/com/basicapp:basic_app"
+ windows_databinding:
+ name: "Databinding Basic app Windows"
+ platform: windows
+ working_directory: examples/databinding
+ build_flags:
+ <<: *rules_flags
+ build_targets:
+ - "//java/com/basicapp:basic_app"
diff --git a/examples/databinding/.bazelrc b/examples/databinding/.bazelrc
new file mode 100644
index 000000000..a28203e1e
--- /dev/null
+++ b/examples/databinding/.bazelrc
@@ -0,0 +1,10 @@
+# Flags needed while the Android rules are being migrated to Starlark.
+common --experimental_google_legacy_api
+common --experimental_enable_android_migration_apis
+common --android_sdk=@androidsdk//:sdk
+common:core_library_desugaring --desugar_java8_libs
+
+# Flags to enable mobile-install v3
+mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary
+# Required to invoke the Studio deployer jar
+mobile-install --tool_java_runtime_version=17
diff --git a/examples/databinding/.gitignore b/examples/databinding/.gitignore
new file mode 100644
index 000000000..63f1fef0e
--- /dev/null
+++ b/examples/databinding/.gitignore
@@ -0,0 +1 @@
+*.lock
diff --git a/examples/databinding/BUILD b/examples/databinding/BUILD
new file mode 100644
index 000000000..a09fce916
--- /dev/null
+++ b/examples/databinding/BUILD
@@ -0,0 +1 @@
+# Empty build file to satisfy gazelle for rules_go.
\ No newline at end of file
diff --git a/examples/databinding/MODULE.bazel b/examples/databinding/MODULE.bazel
new file mode 100644
index 000000000..9ae567b69
--- /dev/null
+++ b/examples/databinding/MODULE.bazel
@@ -0,0 +1,27 @@
+module(
+ name = "basicapp",
+)
+
+bazel_dep(name = "rules_java", version = "7.12.2")
+bazel_dep(name = "bazel_skylib", version = "1.3.0")
+
+bazel_dep(
+ name = "rules_android",
+ version = "0.6.0",
+)
+
+local_path_override(
+ module_name = "rules_android",
+ path = "../../",
+)
+
+remote_android_extensions = use_extension(
+ "@rules_android//bzlmod_extensions:android_extensions.bzl",
+ "remote_android_tools_extensions")
+use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools")
+
+android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
+use_repo(android_sdk_repository_extension, "androidsdk")
+
+register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all")
+
diff --git a/examples/databinding/README.md b/examples/databinding/README.md
new file mode 100644
index 000000000..183e122ed
--- /dev/null
+++ b/examples/databinding/README.md
@@ -0,0 +1,8 @@
+To build, ensure that the `ANDROID_HOME` environment variable is set to the path
+to an Android SDK, and run:
+
+```
+bazel build java/com/basicapp:basic_app
+```
+
+See the `.bazelrc` file for flags needed to build the app.
\ No newline at end of file
diff --git a/examples/databinding/WORKSPACE b/examples/databinding/WORKSPACE
new file mode 100644
index 000000000..39e5713ac
--- /dev/null
+++ b/examples/databinding/WORKSPACE
@@ -0,0 +1,75 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+local_repository(
+ name = "rules_android",
+ path = "../..", # rules_android's WORKSPACE relative to this inner workspace
+)
+# --SNIP--: Everything below this line goes into the example WORKSPACE snippet in the release notes.
+
+# rules_license
+http_archive(
+ name = "rules_license",
+ urls = [
+ "https://github.com/bazelbuild/rules_license/releases/download/1.0.0/rules_license-1.0.0.tar.gz",
+ ],
+ sha256 = "26d4021f6898e23b82ef953078389dd49ac2b5618ac564ade4ef87cced147b38",
+)
+
+# rules_jvm_external
+RULES_JVM_EXTERNAL_TAG = "6.5"
+RULES_JVM_EXTERNAL_SHA = "3a4d56357851cf5b0dae538b3f3e0612a4f58925dfb3cadb2e0c4e87d51e629e"
+
+http_archive(
+ name = "rules_jvm_external",
+ strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
+ sha256 = RULES_JVM_EXTERNAL_SHA,
+ url = "https://github.com/bazelbuild/rules_jvm_external/releases/download/%s/rules_jvm_external-%s.tar.gz" % (RULES_JVM_EXTERNAL_TAG, RULES_JVM_EXTERNAL_TAG)
+)
+
+# bazel_features
+BAZEL_FEATURES_VERSION = "1.20.0"
+BAZEL_FEATURES_HASH = "c2596994cf63513bd44180411a4ac3ae95d32bf59148fcb6087a4642b3ffef11"
+maybe(
+ http_archive,
+ name = "bazel_features",
+ sha256 = BAZEL_FEATURES_HASH,
+ strip_prefix = "bazel_features-" + BAZEL_FEATURES_VERSION,
+ url = "https://github.com/bazel-contrib/bazel_features/releases/download/v" + BAZEL_FEATURES_VERSION + "/bazel_features-v" + BAZEL_FEATURES_VERSION + ".tar.gz",
+)
+maybe(
+ http_archive,
+ name = "proto_bazel_features",
+ sha256 = BAZEL_FEATURES_HASH,
+ strip_prefix = "bazel_features-" + BAZEL_FEATURES_VERSION,
+ url = "https://github.com/bazel-contrib/bazel_features/releases/download/v" + BAZEL_FEATURES_VERSION + "/bazel_features-v" + BAZEL_FEATURES_VERSION + ".tar.gz",
+)
+load("@bazel_features//:deps.bzl", "bazel_features_deps")
+bazel_features_deps()
+
+# Skylib
+http_archive(
+ name = "bazel_skylib",
+ sha256 = "bc283cdfcd526a52c3201279cda4bc298652efa898b10b4db0837dc51652756f",
+ urls = [
+ "https://github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz",
+ ],
+)
+load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
+bazel_skylib_workspace()
+
+load("@rules_android//:prereqs.bzl", "rules_android_prereqs")
+rules_android_prereqs()
+load("@rules_android//:defs.bzl", "rules_android_workspace")
+rules_android_workspace()
+
+load("@rules_android//rules:rules.bzl", "android_sdk_repository")
+android_sdk_repository(
+ name = "androidsdk",
+)
+
+register_toolchains(
+ "@rules_android//toolchains/android:android_default_toolchain",
+ "@rules_android//toolchains/android_sdk:android_sdk_tools",
+)
+
diff --git a/examples/databinding/WORKSPACE.bzlmod b/examples/databinding/WORKSPACE.bzlmod
new file mode 100644
index 000000000..172da6f27
--- /dev/null
+++ b/examples/databinding/WORKSPACE.bzlmod
@@ -0,0 +1 @@
+workspace(name = "basicapp")
diff --git a/examples/databinding/java/com/basicapp/AndroidManifest.xml b/examples/databinding/java/com/basicapp/AndroidManifest.xml
new file mode 100644
index 000000000..ef27259ad
--- /dev/null
+++ b/examples/databinding/java/com/basicapp/AndroidManifest.xml
@@ -0,0 +1,22 @@
+
+