Skip to content

Commit c7cfa9f

Browse files
committed
[databinding] Add example that builds with data binding
1 parent 2ee8a70 commit c7cfa9f

File tree

18 files changed

+287
-0
lines changed

18 files changed

+287
-0
lines changed

examples/databinding/.bazelrc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
common:core_library_desugaring --desugar_java8_libs
2+
3+
common --java_runtime_version=remotejdk_17
4+
common --tool_java_runtime_version=remotejdk_17
5+
6+
# Flags to enable mobile-install v3
7+
mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary
8+
# Required to invoke the Studio deployer jar
9+
mobile-install --tool_java_runtime_version=17

examples/databinding/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.lock

examples/databinding/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Empty build file to satisfy gazelle for rules_go.

examples/databinding/MODULE.bazel

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
module(
2+
name = "databinding",
3+
)
4+
5+
bazel_dep(name = "rules_java", version = "7.12.2")
6+
bazel_dep(name = "bazel_skylib", version = "1.3.0")
7+
bazel_dep(name = "rules_jvm_external", version = "6.6")
8+
9+
bazel_dep(
10+
name = "rules_android",
11+
version = "0.6.3",
12+
)
13+
14+
local_path_override(
15+
module_name = "rules_android",
16+
path = "../../",
17+
)
18+
19+
remote_android_extensions = use_extension(
20+
"@rules_android//bzlmod_extensions:android_extensions.bzl",
21+
"remote_android_tools_extensions")
22+
use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools")
23+
24+
android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
25+
use_repo(android_sdk_repository_extension, "androidsdk")
26+
27+
register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all")
28+
29+
30+
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
31+
maven.install(
32+
name = "maven",
33+
aar_import_bzl_label = "@rules_android//rules:rules.bzl",
34+
artifacts = [
35+
"androidx.annotation:annotation-jvm:1.9.1",
36+
"androidx.databinding:databinding-runtime:8.7.0",
37+
],
38+
repositories = [
39+
"https://maven.google.com",
40+
"https://repo1.maven.org/maven2",
41+
"https://repo.gradle.org/gradle/libs-releases",
42+
],
43+
# To generate, run:
44+
# REPIN=1 bazelisk run --enable_bzlmod @maven//:pin
45+
# lock_file = "//:maven_install.json",
46+
use_starlark_android_rules = True,
47+
)
48+
use_repo(
49+
maven,
50+
"maven",
51+
)

examples/databinding/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
To build, ensure that the `ANDROID_HOME` environment variable is set to the path
2+
to an Android SDK, and run:
3+
4+
```
5+
bazel build java/com/basicapp:basic_app
6+
```
7+
8+
See the `.bazelrc` file for flags needed to build the app.

examples/databinding/WORKSPACE

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
local_repository(
2+
name = "rules_android",
3+
path = "../..", # rules_android's WORKSPACE relative to this inner workspace
4+
)
5+
6+
# --SNIP--: Everything below this line goes into the example WORKSPACE snippet in the release notes.
7+
8+
# Android rules dependencies
9+
load("@rules_android//:prereqs.bzl", "rules_android_prereqs")
10+
rules_android_prereqs()
11+
12+
##### rules_java setup for rules_android #####
13+
load("@rules_java//java:rules_java_deps.bzl", "rules_java_dependencies")
14+
rules_java_dependencies()
15+
# note that the following line is what is minimally required from protobuf for the java rules
16+
# consider using the protobuf_deps() public API from @com_google_protobuf//:protobuf_deps.bzl
17+
load("@com_google_protobuf//bazel/private:proto_bazel_features.bzl", "proto_bazel_features") # buildifier: disable=bzl-visibility
18+
proto_bazel_features(name = "proto_bazel_features")
19+
# register toolchains
20+
load("@rules_java//java:repositories.bzl", "rules_java_toolchains")
21+
rules_java_toolchains()
22+
23+
##### rules_jvm_external setup for rules_android #####
24+
load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
25+
rules_jvm_external_deps()
26+
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
27+
rules_jvm_external_setup()
28+
29+
load("@rules_jvm_external//:defs.bzl", "maven_install")
30+
31+
maven_install(
32+
name = "maven",
33+
artifacts = [
34+
"androidx.annotation:annotation-jvm:1.9.1",
35+
"androidx.databinding:databinding-adapters:8.7.0",
36+
"androidx.databinding:databinding-runtime:8.7.0",
37+
"com.google.protobuf:protobuf-java:4.27.2",
38+
"com.google.protobuf:protobuf-java-util:4.27.2",
39+
],
40+
repositories = [
41+
"https://maven.google.com",
42+
"https://repo1.maven.org/maven2",
43+
"https://repo.gradle.org/gradle/libs-releases",
44+
],
45+
)
46+
47+
##### rules_android setup #####
48+
load("@rules_android//:defs.bzl", "rules_android_workspace")
49+
rules_android_workspace()
50+
51+
# Android SDK setup
52+
load("@rules_android//rules:rules.bzl", "android_sdk_repository")
53+
android_sdk_repository(
54+
name = "androidsdk",
55+
)
56+
57+
register_toolchains(
58+
"@rules_android//toolchains/android:android_default_toolchain",
59+
"@rules_android//toolchains/android_sdk:android_sdk_tools",
60+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
workspace(name = "basicapp")
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
package="com.databindingapp" >
4+
5+
<uses-sdk
6+
android:minSdkVersion="21"
7+
android:targetSdkVersion="30" />
8+
9+
<application
10+
android:allowBackup="true"
11+
android:icon="@drawable/ic_launcher"
12+
android:label="@string/app_name" >
13+
<activity
14+
android:name="com.databindingapp.DataBindingMainActivity"
15+
android:exported="true">
16+
<intent-filter>
17+
<action android:name="android.intent.action.MAIN" />
18+
<category android:name="android.intent.category.LAUNCHER" />
19+
</intent-filter>
20+
</activity>
21+
</application>
22+
</manifest>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
load("@rules_android//android:rules.bzl", "android_binary", "android_library")
2+
3+
android_binary(
4+
name = "databindingapp",
5+
manifest = "AndroidManifest.xml",
6+
enable_data_binding = True,
7+
deps = [
8+
":databinding_lib",
9+
"@maven//:androidx_databinding_databinding_runtime",
10+
],
11+
)
12+
13+
android_library(
14+
name = "databinding_lib",
15+
srcs = ["DataBindingMainActivity.java"],
16+
manifest = "AndroidManifest.xml",
17+
resource_files = glob(["res/**"]),
18+
enable_data_binding = True,
19+
deps = [
20+
"@maven//:androidx_annotation_annotation_jvm",
21+
"@maven//:androidx_databinding_databinding_runtime",
22+
],
23+
)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright 2022 The Bazel Authors. All rights reserved.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package com.databindingapp;
16+
17+
import android.app.Activity;
18+
import android.os.Bundle;
19+
import android.view.Menu;
20+
import android.view.View;
21+
import android.widget.Button;
22+
import android.widget.TextView;
23+
import com.databindingapp.databinding.ActivityDataBindingBinding;
24+
25+
import java.util.Random;
26+
27+
/**
28+
* The main activity of the Basic Sample App.
29+
*/
30+
public class DataBindingMainActivity extends Activity {
31+
32+
@Override
33+
protected void onCreate(Bundle savedInstanceState) {
34+
super.onCreate(savedInstanceState);
35+
36+
ActivityDataBindingBinding binding = ActivityDataBindingBinding.inflate(getLayoutInflater());
37+
38+
Random random = new Random();
39+
binding.setShowFizz(random.nextDouble() < 0.5);
40+
binding.setShowBuzz(random.nextDouble() < 0.5);
41+
42+
setContentView(binding.getRoot());
43+
}
44+
45+
@Override
46+
public boolean onCreateOptionsMenu(Menu menu) {
47+
// Inflate the menu; this adds items to the action bar if it is present.
48+
getMenuInflater().inflate(R.menu.menu, menu);
49+
return true;
50+
}
51+
}

0 commit comments

Comments
 (0)