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
Change-Id: I48571a5cd94b0ba6b1f722d032e45aac6e9527ed
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index c8784f8..a5f7d4f 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -282,4 +282,13 @@
// GraphicsJNI.h includes hwui headers
"libhwui",
],
+
+ product_variables: {
+ debuggable: {
+ cflags: ["-D__ANDROID_DEBUGGABLE__"]
+ },
+ treble: {
+ cflags: ["-D__ANDROID_TREBLE__"]
+ },
+ },
}
diff --git a/core/jni/android_os_HwBinder.cpp b/core/jni/android_os_HwBinder.cpp
index 577cd49..b5c8815 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 <cstring>
+
#include <JNIHelp.h>
#include <android/hidl/manager/1.0/IServiceManager.h>
#include <android/hidl/base/1.0/IBase.h>
@@ -329,8 +331,19 @@
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 */);