From 2cf5a3f46ce5697e50c6b582354ba08b11d93815 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Tue, 23 May 2017 12:45:16 -0700 Subject: [PATCH] HIDL: C++ Java parity Add same restrictions to Java that we have in C++ HIDL code for C++ services. Test: hidl_test_java, multiple internal devices work Bug: 38415912 Merged-In: I48571a5cd94b0ba6b1f722d032e45aac6e9527ed Change-Id: I48571a5cd94b0ba6b1f722d032e45aac6e9527ed --- core/jni/Android.mk | 7 +++++++ core/jni/android_os_HwBinder.cpp | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/core/jni/Android.mk b/core/jni/Android.mk index cab47582b8e8e..eb11182ca9de7 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -318,6 +318,13 @@ LOCAL_CFLAGS += -Wall -Werror -Wno-error=deprecated-declarations -Wunused -Wunre # is not being compiled with that level. Remove once this has changed. LOCAL_CLANG_CFLAGS += -Wno-c++11-extensions +ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) +LOCAL_CFLAGS += -D__ANDROID_DEBUGGABLE__ +endif +ifneq (,$(filter true, $(PRODUCT_FULL_TREBLE))) +LOCAL_CFLAGS += -D__ANDROID_TREBLE__ +endif + include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/core/jni/android_os_HwBinder.cpp b/core/jni/android_os_HwBinder.cpp index dcb23007a70b2..19f779f39b1d7 100644 --- a/core/jni/android_os_HwBinder.cpp +++ b/core/jni/android_os_HwBinder.cpp @@ -23,6 +23,8 @@ #include "android_os_HwParcel.h" #include "android_os_HwRemoteBinder.h" +#include + #include #include #include @@ -331,8 +333,19 @@ static jobject JHwBinder_native_getService( IServiceManager::Transport transport = transportRet; - if ( transport != IServiceManager::Transport::EMPTY - && transport != IServiceManager::Transport::HWBINDER) { +#ifdef __ANDROID_TREBLE__ +#ifdef __ANDROID_DEBUGGABLE__ + const char* testingOverride = std::getenv("TREBLE_TESTING_OVERRIDE"); + const bool vintfLegacy = (transport == IServiceManager::Transport::EMPTY) + && testingOverride && !strcmp(testingOverride, "true"); +#else // __ANDROID_TREBLE__ but not __ANDROID_DEBUGGABLE__ + const bool vintfLegacy = false; +#endif // __ANDROID_DEBUGGABLE__ +#else // not __ANDROID_TREBLE__ + const bool vintfLegacy = (transport == IServiceManager::Transport::EMPTY); +#endif // __ANDROID_TREBLE__"; + + if (transport != IServiceManager::Transport::HWBINDER && !vintfLegacy) { LOG(ERROR) << "service " << ifaceName << " declares transport method " << toString(transport) << " but framework expects hwbinder."; signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */);