Loading core/jni/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -273,6 +273,7 @@ LOCAL_SHARED_LIBRARIES := \ libhidlbase \ libhidlbase \ libhidltransport \ libhidltransport \ libhwbinder \ libhwbinder \ libvintf \ LOCAL_SHARED_LIBRARIES += \ LOCAL_SHARED_LIBRARIES += \ libhwui \ libhwui \ Loading core/jni/android_os_HwBinder.cpp +27 −10 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <hidl/HidlTransportSupport.h> #include <hidl/HidlTransportSupport.h> #include <hwbinder/ProcessState.h> #include <hwbinder/ProcessState.h> #include <nativehelper/ScopedLocalRef.h> #include <nativehelper/ScopedLocalRef.h> #include <vintf/parse_string.h> #include "core_jni_helpers.h" #include "core_jni_helpers.h" Loading Loading @@ -300,6 +301,8 @@ static jobject JHwBinder_native_getService( jstring ifaceNameObj, jstring ifaceNameObj, jstring serviceNameObj) { jstring serviceNameObj) { using ::android::vintf::operator<<; if (ifaceNameObj == NULL) { if (ifaceNameObj == NULL) { jniThrowException(env, "java/lang/NullPointerException", NULL); jniThrowException(env, "java/lang/NullPointerException", NULL); return NULL; return NULL; Loading @@ -317,27 +320,41 @@ static jobject JHwBinder_native_getService( return NULL; return NULL; } } const char *ifaceName = env->GetStringUTFChars(ifaceNameObj, NULL); const char *ifaceNameCStr = env->GetStringUTFChars(ifaceNameObj, NULL); if (ifaceName == NULL) { if (ifaceNameCStr == NULL) { return NULL; // XXX exception already pending? return NULL; // XXX exception already pending? } } const char *serviceName = env->GetStringUTFChars(serviceNameObj, NULL); std::string ifaceName(ifaceNameCStr); if (serviceName == NULL) { env->ReleaseStringUTFChars(ifaceNameObj, ifaceNameCStr); env->ReleaseStringUTFChars(ifaceNameObj, ifaceName); ::android::hardware::hidl_string ifaceNameHStr; ifaceNameHStr.setToExternal(ifaceName.c_str(), ifaceName.size()); const char *serviceNameCStr = env->GetStringUTFChars(serviceNameObj, NULL); if (serviceNameCStr == NULL) { return NULL; // XXX exception already pending? return NULL; // XXX exception already pending? } } std::string serviceName(serviceNameCStr); env->ReleaseStringUTFChars(serviceNameObj, serviceNameCStr); ::android::hardware::hidl_string serviceNameHStr; serviceNameHStr.setToExternal(serviceName.c_str(), serviceName.size()); LOG(INFO) << "Looking for service " LOG(INFO) << "Looking for service " << ifaceName << ifaceName << "/" << "/" << serviceName; << serviceName; Return<sp<hidl::base::V1_0::IBase>> ret = manager->get(ifaceName, serviceName); ::android::vintf::Transport transport = ::android::hardware::getTransport(ifaceName); if ( transport != ::android::vintf::Transport::EMPTY && transport != ::android::vintf::Transport::HWBINDER) { LOG(ERROR) << "service " << ifaceName << " declares transport method " << transport << " but framework expects " << ::android::vintf::Transport::HWBINDER; signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); return NULL; } env->ReleaseStringUTFChars(ifaceNameObj, ifaceName); Return<sp<hidl::base::V1_0::IBase>> ret = manager->get(ifaceNameHStr, serviceNameHStr); ifaceName = NULL; env->ReleaseStringUTFChars(serviceNameObj, serviceName); serviceName = NULL; if (!ret.isOk()) { if (!ret.isOk()) { signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); Loading Loading
core/jni/Android.mk +1 −0 Original line number Original line Diff line number Diff line Loading @@ -273,6 +273,7 @@ LOCAL_SHARED_LIBRARIES := \ libhidlbase \ libhidlbase \ libhidltransport \ libhidltransport \ libhwbinder \ libhwbinder \ libvintf \ LOCAL_SHARED_LIBRARIES += \ LOCAL_SHARED_LIBRARIES += \ libhwui \ libhwui \ Loading
core/jni/android_os_HwBinder.cpp +27 −10 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <hidl/HidlTransportSupport.h> #include <hidl/HidlTransportSupport.h> #include <hwbinder/ProcessState.h> #include <hwbinder/ProcessState.h> #include <nativehelper/ScopedLocalRef.h> #include <nativehelper/ScopedLocalRef.h> #include <vintf/parse_string.h> #include "core_jni_helpers.h" #include "core_jni_helpers.h" Loading Loading @@ -300,6 +301,8 @@ static jobject JHwBinder_native_getService( jstring ifaceNameObj, jstring ifaceNameObj, jstring serviceNameObj) { jstring serviceNameObj) { using ::android::vintf::operator<<; if (ifaceNameObj == NULL) { if (ifaceNameObj == NULL) { jniThrowException(env, "java/lang/NullPointerException", NULL); jniThrowException(env, "java/lang/NullPointerException", NULL); return NULL; return NULL; Loading @@ -317,27 +320,41 @@ static jobject JHwBinder_native_getService( return NULL; return NULL; } } const char *ifaceName = env->GetStringUTFChars(ifaceNameObj, NULL); const char *ifaceNameCStr = env->GetStringUTFChars(ifaceNameObj, NULL); if (ifaceName == NULL) { if (ifaceNameCStr == NULL) { return NULL; // XXX exception already pending? return NULL; // XXX exception already pending? } } const char *serviceName = env->GetStringUTFChars(serviceNameObj, NULL); std::string ifaceName(ifaceNameCStr); if (serviceName == NULL) { env->ReleaseStringUTFChars(ifaceNameObj, ifaceNameCStr); env->ReleaseStringUTFChars(ifaceNameObj, ifaceName); ::android::hardware::hidl_string ifaceNameHStr; ifaceNameHStr.setToExternal(ifaceName.c_str(), ifaceName.size()); const char *serviceNameCStr = env->GetStringUTFChars(serviceNameObj, NULL); if (serviceNameCStr == NULL) { return NULL; // XXX exception already pending? return NULL; // XXX exception already pending? } } std::string serviceName(serviceNameCStr); env->ReleaseStringUTFChars(serviceNameObj, serviceNameCStr); ::android::hardware::hidl_string serviceNameHStr; serviceNameHStr.setToExternal(serviceName.c_str(), serviceName.size()); LOG(INFO) << "Looking for service " LOG(INFO) << "Looking for service " << ifaceName << ifaceName << "/" << "/" << serviceName; << serviceName; Return<sp<hidl::base::V1_0::IBase>> ret = manager->get(ifaceName, serviceName); ::android::vintf::Transport transport = ::android::hardware::getTransport(ifaceName); if ( transport != ::android::vintf::Transport::EMPTY && transport != ::android::vintf::Transport::HWBINDER) { LOG(ERROR) << "service " << ifaceName << " declares transport method " << transport << " but framework expects " << ::android::vintf::Transport::HWBINDER; signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); return NULL; } env->ReleaseStringUTFChars(ifaceNameObj, ifaceName); Return<sp<hidl::base::V1_0::IBase>> ret = manager->get(ifaceNameHStr, serviceNameHStr); ifaceName = NULL; env->ReleaseStringUTFChars(serviceNameObj, serviceName); serviceName = NULL; if (!ret.isOk()) { if (!ret.isOk()) { signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); signalExceptionForError(env, UNKNOWN_ERROR, true /* canThrowRemoteException */); Loading