diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeSoLoader.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeSoLoader.kt index e772b3c57df..07d99609a71 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeSoLoader.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeSoLoader.kt @@ -35,7 +35,6 @@ internal object BridgeSoLoader { @get:JvmStatic @get:JvmName("isInitialized") - @Volatile var initialized: Boolean = false private set } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicNative.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicNative.kt index e8ceb6dc500..edb2b3f951d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicNative.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicNative.kt @@ -9,7 +9,6 @@ package com.facebook.react.bridge import com.facebook.jni.HybridClassBase import com.facebook.proguard.annotations.DoNotStripAny -import com.facebook.soloader.SoLoader /** * An implementation of [Dynamic] that has a C++ implementation. @@ -49,7 +48,7 @@ private class DynamicNative : HybridClassBase(), Dynamic { private companion object { init { - SoLoader.loadLibrary("reactnativejni_common") + ReactNativeJniCommonSoLoader.staticInit() } } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArray.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArray.kt index e75ce7964d5..26f2bee21f9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArray.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArray.kt @@ -9,7 +9,6 @@ package com.facebook.react.bridge import com.facebook.jni.HybridClassBase import com.facebook.proguard.annotations.DoNotStrip -import com.facebook.soloader.SoLoader /** Base class for an array whose members are stored in native code (C++). */ @DoNotStrip @@ -20,7 +19,7 @@ public abstract class NativeArray protected constructor() : private companion object { init { - SoLoader.loadLibrary("reactnativejni_common") + ReactNativeJniCommonSoLoader.staticInit() } } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeMap.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeMap.kt index 22bed164f52..33036c358d2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeMap.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeMap.kt @@ -9,7 +9,6 @@ package com.facebook.react.bridge import com.facebook.jni.HybridClassBase import com.facebook.proguard.annotations.DoNotStrip -import com.facebook.soloader.SoLoader /** Base class for a Map whose keys and values are stored in native code (C++). */ @DoNotStrip @@ -18,7 +17,7 @@ public abstract class NativeMap : HybridClassBase() { private companion object { init { - SoLoader.loadLibrary("reactnativejni_common") + ReactNativeJniCommonSoLoader.staticInit() } } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarker.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarker.java index 7d704ee744b..54023b917d5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarker.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarker.java @@ -211,7 +211,7 @@ public class ReactMarker { now = SystemClock.uptimeMillis(); } - if (BridgeSoLoader.isInitialized()) { + if (ReactNativeJniCommonSoLoader.isInitialized()) { // First send the current marker nativeLogMarker(name.name(), now); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJniCommonSoLoader.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJniCommonSoLoader.kt new file mode 100644 index 00000000000..66fdefe9f1f --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJniCommonSoLoader.kt @@ -0,0 +1,31 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.bridge + +import com.facebook.soloader.SoLoader + +internal object ReactNativeJniCommonSoLoader { + + @JvmStatic + @Synchronized + fun staticInit() { + if (initialized) { + return + } + ReactMarker.logMarker(ReactMarkerConstants.LOAD_REACT_NATIVE_SO_FILE_START) + SoLoader.loadLibrary("reactnativejni_common") + ReactMarker.logMarker(ReactMarkerConstants.LOAD_REACT_NATIVE_SO_FILE_END) + initialized = true + } + + @get:JvmStatic + @get:JvmName("isInitialized") + @Volatile + var initialized: Boolean = false + private set +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/internal/LegacyArchitectureLogger.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/internal/LegacyArchitectureLogger.kt index b932403ccb7..8156aa99970 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/internal/LegacyArchitectureLogger.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/annotations/internal/LegacyArchitectureLogger.kt @@ -62,7 +62,7 @@ public object LegacyArchitectureLogger { } LegacyArchitectureLogLevel.WARNING -> { ReactSoftExceptionLogger.logSoftException( - tag, ReactNoCrashSoftException("$name $exceptionMessage.")) + tag, ReactNoCrashSoftException("$name $exceptionMessage")) } } } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt index 5840cc97050..f315cca6dd1 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt @@ -24,10 +24,11 @@ add_library( reactnativejni_common OBJECT JDynamicNative.cpp + JReactMarker.cpp NativeArray.cpp NativeCommon.cpp NativeMap.cpp - OnLoad-common.cpp + OnLoad-common.cpp ReadableNativeArray.cpp ReadableNativeMap.cpp WritableNativeArray.cpp @@ -36,7 +37,7 @@ add_library( target_merge_so(reactnativejni_common) target_include_directories(reactnativejni_common PUBLIC ../../) -target_link_libraries(reactnativejni_common fbjni folly_runtime) +target_link_libraries(reactnativejni_common fbjni folly_runtime react_cxxreact) target_compile_reactnative_options(reactnativejni_common PRIVATE) target_compile_options(reactnativejni_common PRIVATE -Wno-unused-lambda-capture) @@ -55,7 +56,6 @@ add_library( JInspector.cpp JMessageQueueThread.cpp JReactCxxErrorHandler.cpp - JReactMarker.cpp JReactSoftExceptionLogger.cpp JRuntimeExecutor.cpp JRuntimeScheduler.cpp diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp index a72b4dffcb1..293d2ffc8ab 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp @@ -8,6 +8,7 @@ #include #include "JCallback.h" #include "JDynamicNative.h" +#include "JReactMarker.h" #include "NativeArray.h" #include "NativeMap.h" #include "WritableNativeArray.h" @@ -19,6 +20,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { return facebook::jni::initialize(vm, [] { JCxxCallbackImpl::registerNatives(); JDynamicNative::registerNatives(); + JReactMarker::registerNatives(); NativeArray::registerNatives(); NativeMap::registerNatives(); ReadableNativeArray::registerNatives(); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp index 42b66bc3df2..1604b82044a 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp @@ -16,7 +16,6 @@ #include "CxxModuleWrapperBase.h" #include "InspectorNetworkRequestListener.h" #include "JInspector.h" -#include "JReactMarker.h" #include "JavaScriptExecutorHolder.h" #include "ReactInstanceManagerInspectorTarget.h" @@ -42,7 +41,6 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { #endif CatalystInstanceImpl::registerNatives(); CxxModuleWrapperBase::registerNatives(); - JReactMarker::registerNatives(); JInspector::registerNatives(); ReactInstanceManagerInspectorTarget::registerNatives(); InspectorNetworkRequestListener::registerNatives();