diff options
| -rw-r--r-- | runtime/jni/jni_internal.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/runtime/jni/jni_internal.cc b/runtime/jni/jni_internal.cc index 588c2cd04d..a9a5d8b868 100644 --- a/runtime/jni/jni_internal.cc +++ b/runtime/jni/jni_internal.cc @@ -2701,7 +2701,13 @@ class JNI { // TODO: make this a hard register error in the future. } - if (is_class_loader_namespace_natively_bridged) { + // It is possible to link a class with native methods from a library loaded by + // a different classloader. In this case IsClassLoaderNamespaceNativelyBridged + // fails detect if native bridge is enabled and may return false. + // For this reason we always check method with native bridge (see b/393035780 + // for details). + if (is_class_loader_namespace_natively_bridged || + android::NativeBridgeIsNativeBridgeFunctionPointer(fnPtr)) { fnPtr = GenerateNativeBridgeTrampoline(fnPtr, m); } const void* final_function_ptr = class_linker->RegisterNative(soa.Self(), m, fnPtr); |