From 7f8aeed22387d23df1d712c5c807bee34f945d5c Mon Sep 17 00:00:00 2001 From: Ming-Chuan Date: Thu, 2 Sep 2021 03:01:48 +0800 Subject: [PATCH] Only enable binder transport code when API level is high enough (#27177) This commit adds a new symbol GPR_SUPPORT_BINDER_TRANSPORT to port_platform.h This will help avoid surprising compilation failure when compiled with old NDK or low API level --- include/grpc/impl/codegen/port_platform.h | 5 +++ .../transport/binder/client/channel_create.cc | 33 ++++++++++++++++--- .../transport/binder/client/channel_create.h | 4 +-- .../binder/wire_format/binder_android.cc | 7 ++-- .../binder/wire_format/binder_android.h | 11 ++----- .../binder/wire_format/binder_constants.cc | 4 +-- .../binder/wire_format/binder_constants.h | 4 +-- 7 files changed, 46 insertions(+), 22 deletions(-) diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index 05bd4fb2554..abf9aa68314 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -117,6 +117,11 @@ #elif defined(ANDROID) || defined(__ANDROID__) #define GPR_PLATFORM_STRING "android" #define GPR_ANDROID 1 +#ifdef __ANDROID_API__ +#if (__ANDROID_API__) >= 29 +#define GPR_SUPPORT_BINDER_TRANSPORT 1 +#endif +#endif // TODO(apolcyn): re-evaluate support for c-ares // on android after upgrading our c-ares dependency. // See https://github.com/grpc/grpc/issues/18038. diff --git a/src/core/ext/transport/binder/client/channel_create.cc b/src/core/ext/transport/binder/client/channel_create.cc index 0739787ec75..275856c5885 100644 --- a/src/core/ext/transport/binder/client/channel_create.cc +++ b/src/core/ext/transport/binder/client/channel_create.cc @@ -16,14 +16,23 @@ #include "src/core/ext/transport/binder/client/channel_create.h" -#if defined(ANDROID) || defined(__ANDROID__) +// The interface is only defined if GPR_ANDROID is defined, because some +// arguments requires JNI. +// Furthermore, the interface is non-phony only when +// GPR_SUPPORT_BINDER_TRANSPORT is true because actual implementation of binder +// transport requires newer version of NDK API + +#ifdef GPR_ANDROID + +#include +#include + +#ifdef GPR_SUPPORT_BINDER_TRANSPORT #include #include #include #include -#include -#include #include #include #include @@ -94,4 +103,20 @@ std::shared_ptr CreateBinderChannel( } // namespace experimental } // namespace grpc -#endif // ANDROID +#else // !GPR_SUPPORT_BINDER_TRANSPORT + +std::shared_ptr CreateBinderChannel(void*, jobject, + absl::string_view, + absl::string_view) { + GPR_ASSERT(0); + return {}; +} + +void BindToOnDeviceServerService(void*, jobject, absl::string_view, + absl::string_view) { + GPR_ASSERT(0); +} + +#endif // GPR_SUPPORT_BINDER_TRANSPORT + +#endif // GPR_ANDROID diff --git a/src/core/ext/transport/binder/client/channel_create.h b/src/core/ext/transport/binder/client/channel_create.h index aa22d09e3a5..260abd0d82f 100644 --- a/src/core/ext/transport/binder/client/channel_create.h +++ b/src/core/ext/transport/binder/client/channel_create.h @@ -15,10 +15,10 @@ #ifndef GRPC_CORE_EXT_TRANSPORT_BINDER_CLIENT_CHANNEL_CREATE_H #define GRPC_CORE_EXT_TRANSPORT_BINDER_CLIENT_CHANNEL_CREATE_H -#if defined(ANDROID) || defined(__ANDROID__) - #include +#ifdef GPR_ANDROID + #include #include #include diff --git a/src/core/ext/transport/binder/wire_format/binder_android.cc b/src/core/ext/transport/binder/wire_format/binder_android.cc index 4d2f850f7c4..ae293eda689 100644 --- a/src/core/ext/transport/binder/wire_format/binder_android.cc +++ b/src/core/ext/transport/binder/wire_format/binder_android.cc @@ -14,12 +14,11 @@ #include -#include "src/core/ext/transport/binder/wire_format/binder_android.h" +#ifdef GPR_SUPPORT_BINDER_TRANSPORT -#if defined(ANDROID) || defined(__ANDROID__) +#include "src/core/ext/transport/binder/wire_format/binder_android.h" #include - #include #include "absl/memory/memory.h" @@ -250,4 +249,4 @@ absl::Status ReadableParcelAndroid::ReadString(char data[111]) const { } // namespace grpc_binder -#endif // defined(ANDROID) || defined(__ANDROID__) +#endif // GPR_SUPPORT_BINDER_TRANSPORT diff --git a/src/core/ext/transport/binder/wire_format/binder_android.h b/src/core/ext/transport/binder/wire_format/binder_android.h index 7355d65836f..985ecd8594b 100644 --- a/src/core/ext/transport/binder/wire_format/binder_android.h +++ b/src/core/ext/transport/binder/wire_format/binder_android.h @@ -15,10 +15,10 @@ #ifndef GRPC_CORE_EXT_TRANSPORT_BINDER_WIRE_FORMAT_BINDER_ANDROID_H #define GRPC_CORE_EXT_TRANSPORT_BINDER_WIRE_FORMAT_BINDER_ANDROID_H -#if defined(ANDROID) || defined(__ANDROID__) - #include +#ifdef GPR_SUPPORT_BINDER_TRANSPORT + #include #include #include @@ -31,11 +31,6 @@ #include "src/core/ext/transport/binder/wire_format/binder.h" #include "src/core/ext/transport/binder/wire_format/wire_reader.h" -// TODO(b/192208764): move this check to somewhere else -#if __ANDROID_API__ < 29 -#error "We only support Android API level >= 29." -#endif - namespace grpc_binder { ndk::SpAIBinder FromJavaBinder(JNIEnv* jni_env, jobject binder); @@ -127,6 +122,6 @@ class TransactionReceiverAndroid final : public TransactionReceiver { } // namespace grpc_binder -#endif // defined(ANDROID) || defined(__ANDROID__) +#endif /*GPR_SUPPORT_BINDER_TRANSPORT*/ #endif // GRPC_CORE_EXT_TRANSPORT_BINDER_WIRE_FORMAT_BINDER_ANDROID_H diff --git a/src/core/ext/transport/binder/wire_format/binder_constants.cc b/src/core/ext/transport/binder/wire_format/binder_constants.cc index 9530fb5b843..a4ca49d28dc 100644 --- a/src/core/ext/transport/binder/wire_format/binder_constants.cc +++ b/src/core/ext/transport/binder/wire_format/binder_constants.cc @@ -16,12 +16,12 @@ #include "src/core/ext/transport/binder/wire_format/binder_constants.h" -#if !(defined(ANDROID) || defined(__ANDROID__)) +#ifndef GPR_SUPPORT_BINDER_TRANSPORT const int FIRST_CALL_TRANSACTION = 0x00000001; const int LAST_CALL_TRANSACTION = 0x00FFFFFF; -#endif // !(defined(ANDROID) || defined(__ANDROID__)) +#endif // GPR_SUPPORT_BINDER_TRANSPORT namespace grpc_binder { diff --git a/src/core/ext/transport/binder/wire_format/binder_constants.h b/src/core/ext/transport/binder/wire_format/binder_constants.h index 1d102be2bbf..e17e6d5ff5a 100644 --- a/src/core/ext/transport/binder/wire_format/binder_constants.h +++ b/src/core/ext/transport/binder/wire_format/binder_constants.h @@ -19,7 +19,7 @@ #include "absl/base/attributes.h" -#if defined(ANDROID) || defined(__ANDROID__) +#ifdef GPR_SUPPORT_BINDER_TRANSPORT #include #include @@ -33,7 +33,7 @@ using transaction_code_t = uint32_t; ABSL_CONST_INIT extern const int FIRST_CALL_TRANSACTION; ABSL_CONST_INIT extern const int LAST_CALL_TRANSACTION; -#endif // defined(ANDROID) || defined(__ANDROID__) +#endif // GPR_SUPPORT_BINDER_TRANSPORT namespace grpc_binder {