Merge branch 'master' into server-callback-on-ee

pull/36126/head
AJ Heller 11 months ago
commit 4a1efaebe6
  1. 26
      BUILD
  2. 31
      WORKSPACE
  3. 25
      examples/android/binder/java/io/grpc/binder/cpp/README.md
  4. 2
      examples/android/binder/java/io/grpc/binder/cpp/exampleclient/BUILD
  5. 2
      examples/android/binder/java/io/grpc/binder/cpp/exampleserver/BUILD
  6. 33
      templates/tools/dockerfile/test/binder_transport_apk/Dockerfile.template
  7. 16
      test/core/end2end/fuzzers/fuzzing_common.cc
  8. 3
      test/core/end2end/fuzzers/fuzzing_common.h
  9. 3
      third_party/android/BUILD
  10. 62
      third_party/android/android_configure.bzl
  11. 6
      third_party/cares/cares.BUILD
  12. 1
      tools/bazel.rc
  13. 2
      tools/bazelify_tests/dockerimage_current_versions.bzl
  14. 2
      tools/dockerfile/test/binder_transport_apk.current_version
  15. 23
      tools/dockerfile/test/binder_transport_apk/Dockerfile
  16. 14
      tools/internal_ci/linux/grpc_binder_transport_apk_build_in_docker.sh

26
BUILD

@ -65,6 +65,30 @@ bool_flag(
build_setting_default = False, build_setting_default = False,
) )
platform(
name = "android_x86_64",
constraint_values = [
"@platforms//os:android",
"@platforms//cpu:x86_64",
],
)
platform(
name = "android_arm64",
constraint_values = [
"@platforms//os:android",
"@platforms//cpu:arm64",
],
)
platform(
name = "android_armv7",
constraint_values = [
"@platforms//os:android",
"@platforms//cpu:armv7",
],
)
config_setting( config_setting(
name = "grpc_no_rls_flag", name = "grpc_no_rls_flag",
flag_values = {":disable_grpc_rls": "true"}, flag_values = {":disable_grpc_rls": "true"},
@ -84,6 +108,8 @@ config_setting(
config_setting( config_setting(
name = "android", name = "android",
values = {"crosstool_top": "//external:android/crosstool"}, values = {"crosstool_top": "//external:android/crosstool"},
# TODO: Use constraint_values to detect android after Bazel 7.0 platforms migration is finished
# constraint_values = [ "@platforms//os:android" ],
) )
config_setting( config_setting(

@ -27,19 +27,34 @@ custom_exec_properties(
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive( http_archive(
name = "build_bazel_rules_android", name = "platforms",
sha256 = "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", sha256 = "8150406605389ececb6da07cbcb509d5637a3ab9a24bc69b1101531367d89d74",
strip_prefix = "rules_android-0.1.1", urls = ["https://github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz"],
urls = ["https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip"],
) )
load("//third_party/android:android_configure.bzl", "android_configure") RULES_ANDROID_NDK_COMMIT = "010f4f17dd13a8baaaacc28ba6c8c2c75f54c68b"
android_configure(name = "local_config_android") RULES_ANDROID_NDK_SHA = "2ab6a97748772f289331d75caaaee0593825935d1d9d982231a437fb8ab5a14d"
load("@local_config_android//:android_configure.bzl", "android_workspace") http_archive(
name = "rules_android_ndk",
sha256 = RULES_ANDROID_NDK_SHA,
strip_prefix = "rules_android_ndk-%s" % RULES_ANDROID_NDK_COMMIT,
url = "https://github.com/bazelbuild/rules_android_ndk/archive/%s.zip" % RULES_ANDROID_NDK_COMMIT,
)
android_sdk_repository(
name = "androidsdk",
build_tools_version = "34.0.0",
)
load("@rules_android_ndk//:rules.bzl", "android_ndk_repository")
android_ndk_repository(name = "androidndk")
android_workspace() # Note that we intentionally avoid calling `register_toolchains("@androidndk//:all")`
# here, because the toolchain rule fails when $ANDROID_NDK_HOME is not set.
# Use `--extra_toolchains=@androidndk//:all` to manually register it when building for Android.
# Prevents bazel's '...' expansion from including the following folder. # Prevents bazel's '...' expansion from including the following folder.
# This is required because the BUILD file in the following folder # This is required because the BUILD file in the following folder

@ -1,20 +1,23 @@
# gRPC-core BinderTransport example apps # gRPC-core BinderTransport example apps
WIP.
## Build Instruction ## Build Instruction
1. Install Android SDK and NDK. Currently we only support SDK version 30.0.3 and 1. Install Android SDK and NDK. Only NDK version >= 25 is supported. We tested against SDK Platform `33` and NDK `26.2.11394342`.
NDK version 21.4.7075529 . Make sure you get these exact versions otherwise 2. Make sure Bazel is at least `7.0`. Use `export OVERRIDE_BAZEL_VERSION=7.1.0` to selected a supported version listed in `bazel/supported_versions.txt` if necessary.
Bazel might complain. 3. Point environment variables to install locations of SDK and NDK
```
2. Point environment variables to install locations of SDK and NDK export ANDROID_HOME=$HOME/android-sdk
export ANDROID_NDK_HOME=$HOME/android-sdk/ndk/26.2.11394342
```
4. To build a fat APK that supports `x86_64`, `armv7`, and `arm64`:
``` ```
export ANDROID_HOME=$HOME/Android/Sdk/ bazel build \
export ANDROID_NDK_HOME=$HOME/Android/Sdk/ndk/21.4.7075529 --extra_toolchains=@androidndk//:all \
--android_platforms=//:android_x86_64,//:android_armv7,//:android_arm64 \
--copt=-Wno-unknown-warning-option \
//examples/android/binder/java/io/grpc/binder/cpp/exampleserver:app \
//examples/android/binder/java/io/grpc/binder/cpp/exampleclient:app
``` ```
3. `bazel build //examples/android/binder/java/io/grpc/binder/cpp/exampleclient:app`
4. `bazel build //examples/android/binder/java/io/grpc/binder/cpp/exampleserver:app`
5. `adb install 5. `adb install
bazel-bin/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/app.apk` bazel-bin/examples/android/binder/java/io/grpc/binder/cpp/exampleclient/app.apk`
6. `adb install 6. `adb install

@ -12,8 +12,6 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
load("@build_bazel_rules_android//android:rules.bzl", "android_binary", "android_library")
cc_library( cc_library(
name = "jni_lib", name = "jni_lib",
srcs = ["native.cc"], srcs = ["native.cc"],

@ -12,8 +12,6 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
load("@build_bazel_rules_android//android:rules.bzl", "android_binary", "android_library")
cc_library( cc_library(
name = "jni_lib", name = "jni_lib",
srcs = ["native.cc"], srcs = ["native.cc"],

@ -19,26 +19,31 @@
#======================== #========================
# Java # Java
RUN apt-get install -y openjdk-8-jdk RUN apt-get install -y openjdk-21-jdk
#======================== #========================
# Android SDK/NDK installation # Android SDK/NDK installation
ENV SDK_ROOT=/opt/android-sdk ENV ANDROID_SDK_VERSION 11076708
ENV ANDROID_NDK_VERSION 26.2.11394342
ENV SDK_ROOT /opt/android-sdk
RUN mkdir -p $SDK_ROOT RUN mkdir -p $SDK_ROOT
RUN wget -O cmd.zip dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip && \ RUN cd $SDK_ROOT && \
unzip cmd.zip && rm cmd.zip && \ wget -O cmd.zip https://dl.google.com/android/repository/commandlinetools-linux-${'${ANDROID_SDK_VERSION}'}_latest.zip && \
yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'tools' && \ unzip -q cmd.zip && \
yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'platform-tools' && \ rm cmd.zip
yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'build-tools;30.0.3' && \
yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'platforms;android-29' && \
yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'ndk-bundle' && \
yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'ndk;21.4.7075529'
# Set environment variables for Bazel rules RUN yes | $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT --licenses # accept all licenses
ENV ANDROID_HOME=/opt/android-sdk
ENV ANDROID_NDK_HOME=/opt/android-sdk/ndk/21.4.7075529
RUN mkdir -p /var/local/jenkins # This is not required but desirable to reduce the time to download and the chance of download failure.
RUN mkdir -p ~/.android && touch ~/.android/repositories.cfg
RUN $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT "ndk;$ANDROID_NDK_VERSION" "platforms;android-33" "build-tools;34.0.0"
# Set environment variables for Bazel rules
ENV ANDROID_HOME $SDK_ROOT
ENV ANDROID_NDK_HOME $SDK_ROOT/ndk/$ANDROID_NDK_VERSION
# Define the default command. # Define the default command.
CMD ["bash"] CMD ["bash"]

@ -547,16 +547,6 @@ BasicFuzzer::Result BasicFuzzer::CancelActiveCall() {
return Result::kComplete; return Result::kComplete;
} }
BasicFuzzer::Result BasicFuzzer::SendPingOnChannel() {
if (channel() != nullptr) {
pending_pings_++;
grpc_channel_ping(channel(), cq_, Decrement(&pending_pings_), nullptr);
} else {
return Result::kFailed;
}
return Result::kComplete;
}
BasicFuzzer::Result BasicFuzzer::Pause(Duration duration) { BasicFuzzer::Result BasicFuzzer::Pause(Duration duration) {
++paused_; ++paused_;
engine()->RunAfterExactly(duration, [this]() { --paused_; }); engine()->RunAfterExactly(duration, [this]() { --paused_; });
@ -642,8 +632,7 @@ void BasicFuzzer::ShutdownCalls() {
bool BasicFuzzer::Continue() { bool BasicFuzzer::Continue() {
return channel() != nullptr || server() != nullptr || return channel() != nullptr || server() != nullptr ||
pending_channel_watches_ > 0 || pending_pings_ > 0 || pending_channel_watches_ > 0 || ActiveCall() != nullptr || paused_;
ActiveCall() != nullptr || paused_;
} }
BasicFuzzer::Result BasicFuzzer::ExecuteAction( BasicFuzzer::Result BasicFuzzer::ExecuteAction(
@ -699,7 +688,8 @@ BasicFuzzer::Result BasicFuzzer::ExecuteAction(
return ValidateChannelTarget(); return ValidateChannelTarget();
// send a ping on a channel // send a ping on a channel
case api_fuzzer::Action::kPing: case api_fuzzer::Action::kPing:
return SendPingOnChannel(); // Ping is no longer a part of the API
return BasicFuzzer::Result::kNotSupported;
// enable a tracer // enable a tracer
case api_fuzzer::Action::kEnableTracer: { case api_fuzzer::Action::kEnableTracer: {
grpc_tracer_set_enabled(action.enable_tracer().c_str(), 1); grpc_tracer_set_enabled(action.enable_tracer().c_str(), 1);

@ -135,8 +135,6 @@ class BasicFuzzer {
Result WatchConnectivity(uint32_t duration_us); Result WatchConnectivity(uint32_t duration_us);
// Verify that the channel target can be reliably queried. // Verify that the channel target can be reliably queried.
Result ValidateChannelTarget(); Result ValidateChannelTarget();
// Send a http ping on the channel.
Result SendPingOnChannel();
// Server specific actions // Server specific actions
// Create an active server. // Create an active server.
@ -183,7 +181,6 @@ class BasicFuzzer {
bool server_shutdown_ = false; bool server_shutdown_ = false;
int pending_server_shutdowns_ = 0; int pending_server_shutdowns_ = 0;
int pending_channel_watches_ = 0; int pending_channel_watches_ = 0;
int pending_pings_ = 0;
int paused_ = 0; int paused_ = 0;
std::vector<std::shared_ptr<Call>> calls_; std::vector<std::shared_ptr<Call>> calls_;
RefCountedPtr<ResourceQuota> resource_quota_; RefCountedPtr<ResourceQuota> resource_quota_;

@ -1,3 +0,0 @@
exports_files([
"android_configure.bzl",
])

@ -1,62 +0,0 @@
"""Repository rule for Android SDK and NDK autoconfiguration.
This rule is a no-op unless the required android environment variables are set.
"""
# Based on https://github.com/tensorflow/tensorflow/tree/34c03ed67692eb76cb3399cebca50ea8bcde064c/third_party/android
# Workaround for https://github.com/bazelbuild/bazel/issues/14260
_ANDROID_NDK_HOME = "ANDROID_NDK_HOME"
_ANDROID_SDK_HOME = "ANDROID_HOME"
def _escape_for_windows(path):
"""Properly escape backslashes for Windows.
Ideally, we would do this conditionally, but there is seemingly no way to
determine whether or not this is being called from Windows.
"""
return path.replace("\\", "\\\\")
def _android_autoconf_impl(repository_ctx):
sdk_home = repository_ctx.os.environ.get(_ANDROID_SDK_HOME)
ndk_home = repository_ctx.os.environ.get(_ANDROID_NDK_HOME)
# version 31.0.0 won't work https://stackoverflow.com/a/68036845
sdk_rule = ""
if sdk_home:
sdk_rule = """
native.android_sdk_repository(
name="androidsdk",
path="{}",
build_tools_version="30.0.3",
)
""".format(_escape_for_windows(sdk_home))
# Note that Bazel does not support NDK 22 yet, and Bazel 3.7.1 only
# supports up to API level 29 for NDK 21
ndk_rule = ""
if ndk_home:
ndk_rule = """
native.android_ndk_repository(
name="androidndk",
path="{}",
)
""".format(_escape_for_windows(ndk_home))
if ndk_rule == "" and sdk_rule == "":
sdk_rule = "pass"
repository_ctx.file("BUILD.bazel", "")
repository_ctx.file("android_configure.bzl", """
def android_workspace():
{}
{}
""".format(sdk_rule, ndk_rule))
android_configure = repository_rule(
implementation = _android_autoconf_impl,
environ = [
_ANDROID_NDK_HOME,
_ANDROID_SDK_HOME,
],
)

@ -29,9 +29,9 @@ config_setting(
# This just helps with the build for now. # This just helps with the build for now.
config_setting( config_setting(
name = "android", name = "android",
values = { values = {"crosstool_top": "//external:android/crosstool"},
"crosstool_top": "//external:android/crosstool", # TODO: Use constraint_values to detect android after Bazel 7.0 platforms migration is finished
}, # constraint_values = [ "@platforms//os:android" ],
) )
# iOS is not officially supported through C++. # iOS is not officially supported through C++.

@ -36,7 +36,6 @@ build:opt --compilation_mode=opt
build:opt --copt=-Wframe-larger-than=16384 build:opt --copt=-Wframe-larger-than=16384
build:dbg --compilation_mode=dbg build:dbg --compilation_mode=dbg
build:dbg --copt=-Werror=return-stack-address
# Dynamic link cause issues like: `dyld: malformed mach-o: load commands size (59272) > 32768` # Dynamic link cause issues like: `dyld: malformed mach-o: load commands size (59272) > 32768`
# https://github.com/bazelbuild/bazel/issues/9190 # https://github.com/bazelbuild/bazel/issues/9190

@ -90,7 +90,7 @@ DOCKERIMAGE_CURRENT_VERSIONS = {
"tools/dockerfile/test/android_ndk.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/android_ndk@sha256:ab154ecb062af2111d2d3550c4d3da3384201d9893bbd37d49e8160fc34bc137", "tools/dockerfile/test/android_ndk.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/android_ndk@sha256:ab154ecb062af2111d2d3550c4d3da3384201d9893bbd37d49e8160fc34bc137",
"tools/dockerfile/test/bazel.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/bazel@sha256:eb327f8e44f2712f557de1d8918c41c3cba1112c4b39b13104c29211ed8f827a", "tools/dockerfile/test/bazel.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/bazel@sha256:eb327f8e44f2712f557de1d8918c41c3cba1112c4b39b13104c29211ed8f827a",
"tools/dockerfile/test/bazel_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/bazel_arm64@sha256:6cddc0ecdb42a7db7105b73fc3192edb911702102d1bac671e26d44a17d7aa95", "tools/dockerfile/test/bazel_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/bazel_arm64@sha256:6cddc0ecdb42a7db7105b73fc3192edb911702102d1bac671e26d44a17d7aa95",
"tools/dockerfile/test/binder_transport_apk.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/binder_transport_apk@sha256:a680a8b7d645a2c25948ad3f82f6380c8a1e13fcfe74fc3569acb3b0b202851e", "tools/dockerfile/test/binder_transport_apk.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/binder_transport_apk@sha256:ff64e263dfa5491ee6fddd7f0d7c1a20ba756636655849a3b923c665d78c8ef2",
"tools/dockerfile/test/csharp_debian11_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/csharp_debian11_arm64@sha256:4d4bc5f15e03f3d3d8fd889670ecde2c66a2e4d2dd9db80733c05c1d90c8a248", "tools/dockerfile/test/csharp_debian11_arm64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/csharp_debian11_arm64@sha256:4d4bc5f15e03f3d3d8fd889670ecde2c66a2e4d2dd9db80733c05c1d90c8a248",
"tools/dockerfile/test/csharp_debian11_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/csharp_debian11_x64@sha256:b2e5c47d986312ea0850e2f2e696b45d23ee0aabceea161d31e28559e19ec4a5", "tools/dockerfile/test/csharp_debian11_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/csharp_debian11_x64@sha256:b2e5c47d986312ea0850e2f2e696b45d23ee0aabceea161d31e28559e19ec4a5",
"tools/dockerfile/test/cxx_alpine_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/cxx_alpine_x64@sha256:f2019edf9f2afd5042567f11afb1aa78a789fc9acdcce5ee0c14cc11f6830ed7", "tools/dockerfile/test/cxx_alpine_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/cxx_alpine_x64@sha256:f2019edf9f2afd5042567f11afb1aa78a789fc9acdcce5ee0c14cc11f6830ed7",

@ -1 +1 @@
us-docker.pkg.dev/grpc-testing/testing-images-public/binder_transport_apk:fbe8a32dd2006fab456f2fa0d0e82d3979b7f30b@sha256:a680a8b7d645a2c25948ad3f82f6380c8a1e13fcfe74fc3569acb3b0b202851e us-docker.pkg.dev/grpc-testing/testing-images-public/binder_transport_apk:611a0d410d3032bc41175599a5f1495a07759c1f@sha256:ff64e263dfa5491ee6fddd7f0d7c1a20ba756636655849a3b923c665d78c8ef2

@ -60,19 +60,28 @@ RUN BAZEL_ARCH_SUFFIX="$(uname -m | sed s/aarch64/arm64/)" \
#======================== #========================
# Java # Java
RUN apt-get install -y openjdk-8-jdk RUN apt-get install -y openjdk-21-jdk
#======================== #========================
# Android SDK/NDK installation # Android SDK/NDK installation
ENV SDK_ROOT=/opt/android-sdk ENV ANDROID_SDK_VERSION 11076708
ENV ANDROID_NDK_VERSION 26.2.11394342
ENV SDK_ROOT /opt/android-sdk
RUN mkdir -p $SDK_ROOT RUN mkdir -p $SDK_ROOT
RUN wget -O cmd.zip dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip && unzip cmd.zip && rm cmd.zip && yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'tools' && yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'platform-tools' && yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'build-tools;30.0.3' && yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'platforms;android-29' && yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'ndk-bundle' && yes | ./cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT 'ndk;21.4.7075529' RUN cd $SDK_ROOT && wget -O cmd.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_VERSION}_latest.zip && unzip -q cmd.zip && rm cmd.zip
# Set environment variables for Bazel rules RUN yes | $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT --licenses # accept all licenses
ENV ANDROID_HOME=/opt/android-sdk
ENV ANDROID_NDK_HOME=/opt/android-sdk/ndk/21.4.7075529
RUN mkdir -p /var/local/jenkins # This is not required but desirable to reduce the time to download and the chance of download failure.
RUN mkdir -p ~/.android && touch ~/.android/repositories.cfg
RUN $SDK_ROOT/cmdline-tools/bin/sdkmanager --sdk_root=$SDK_ROOT "ndk;$ANDROID_NDK_VERSION" "platforms;android-33" "build-tools;34.0.0"
# Set environment variables for Bazel rules
ENV ANDROID_HOME $SDK_ROOT
ENV ANDROID_NDK_HOME $SDK_ROOT/ndk/$ANDROID_NDK_VERSION
# Define the default command. # Define the default command.
CMD ["bash"] CMD ["bash"]

@ -18,19 +18,15 @@ set -ex
echo $ANDROID_HOME echo $ANDROID_HOME
echo $ANDROID_NDK_HOME echo $ANDROID_NDK_HOME
# Build all targets using the strict warning option which leverages the # Android platforms only works with Bazel >= 7.0
# clang compiler to check if sources can pass a set of warning options. export OVERRIDE_BAZEL_VERSION=7.1.0
# CPU are specified because gRPC does not build with 32bit NDK (which has socklen_t
# defined as int due to an accident).
# The python option is for disabling python2 enforcement when packing APK
python3 tools/run_tests/python_utils/bazel_report_helper.py --report_path bazel_binder_example_app python3 tools/run_tests/python_utils/bazel_report_helper.py --report_path bazel_binder_example_app
bazel_binder_example_app/bazel_wrapper \ bazel_binder_example_app/bazel_wrapper \
--bazelrc=tools/remote_build/include/test_locally_with_resultstore_results.bazelrc \ --bazelrc=tools/remote_build/include/test_locally_with_resultstore_results.bazelrc \
build \ build \
--define=use_strict_warning=true \ --extra_toolchains=@androidndk//:all \
--copt=-Wno-unknown-warning-option \ --android_platforms=//:android_x86_64,//:android_armv7,//:android_arm64 \
--fat_apk_cpu=x86_64,arm64-v8a \
--extra_toolchains=@rules_python//python:autodetecting_toolchain_nonstrict \
//examples/android/binder/java/io/grpc/binder/cpp/exampleclient:app \ //examples/android/binder/java/io/grpc/binder/cpp/exampleclient:app \
//examples/android/binder/java/io/grpc/binder/cpp/exampleserver:app //examples/android/binder/java/io/grpc/binder/cpp/exampleserver:app

Loading…
Cancel
Save