diff --git a/.changeset/early-rice-fly.md b/.changeset/early-rice-fly.md new file mode 100644 index 00000000..8ca41852 --- /dev/null +++ b/.changeset/early-rice-fly.md @@ -0,0 +1,5 @@ +--- +'@callstack/react-native-brownfield': patch +--- + +fix: make sure native libs are loaded for RN >= 0.80 diff --git a/apps/RNApp/android/BrownfieldLib/consumer-rules.pro b/apps/RNApp/android/BrownfieldLib/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/RNApp/android/BrownfieldLib/src/main/java/com/rnapp/brownfieldlib/ReactNativeHostManager.kt b/apps/RNApp/android/BrownfieldLib/src/main/java/com/rnapp/brownfieldlib/ReactNativeHostManager.kt index 9e51c8c1..825698be 100644 --- a/apps/RNApp/android/BrownfieldLib/src/main/java/com/rnapp/brownfieldlib/ReactNativeHostManager.kt +++ b/apps/RNApp/android/BrownfieldLib/src/main/java/com/rnapp/brownfieldlib/ReactNativeHostManager.kt @@ -4,12 +4,9 @@ import android.app.Application import com.callstack.reactnativebrownfield.OnJSBundleLoaded import com.callstack.reactnativebrownfield.ReactNativeBrownfield import com.facebook.react.PackageList -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative object ReactNativeHostManager { fun initialize(application: Application, onJSBundleLoaded: OnJSBundleLoaded? = null) { - loadReactNative(application) - val packageList = PackageList(application).packages ReactNativeBrownfield.initialize(application, packageList, onJSBundleLoaded) } diff --git a/packages/react-native-brownfield/android/src/main/java/com/callstack/reactnativebrownfield/ReactNativeBrownfield.kt b/packages/react-native-brownfield/android/src/main/java/com/callstack/reactnativebrownfield/ReactNativeBrownfield.kt index 22f3387a..fc9349af 100644 --- a/packages/react-native-brownfield/android/src/main/java/com/callstack/reactnativebrownfield/ReactNativeBrownfield.kt +++ b/packages/react-native-brownfield/android/src/main/java/com/callstack/reactnativebrownfield/ReactNativeBrownfield.kt @@ -7,7 +7,6 @@ import androidx.activity.OnBackPressedCallback import androidx.fragment.app.FragmentActivity import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner -import com.callstack.reactnativebrownfield.utils.VersionUtils import com.facebook.react.ReactHost import com.facebook.react.ReactInstanceEventListener import com.facebook.react.ReactPackage @@ -28,33 +27,29 @@ fun interface OnMessageListener { fun onMessage(message: String) } -/** - * The threshold RN version based on which we decide whether to - * load JNI libs or not. We only load JNI libs on version less - * than this. - */ -private const val RN_THRESHOLD_VERSION = "0.80.0" - class ReactNativeBrownfield private constructor(val reactHost: ReactHost) { private val messageListeners = CopyOnWriteArrayList() companion object { private lateinit var instance: ReactNativeBrownfield private val initialized = AtomicBoolean() + private val nativeLibsLoaded = AtomicBoolean() private const val LOG_TAG = "ReactNativeBrownfield" @JvmStatic val shared: ReactNativeBrownfield get() = instance private fun loadNativeLibs(application: Application) { - val rnVersion = BuildConfig.RN_VERSION - - if (VersionUtils.isVersionLessThan(rnVersion, RN_THRESHOLD_VERSION)) { - SoLoader.init(application.applicationContext, OpenSourceMergedSoMapping) - load() + if (!nativeLibsLoaded.getAndSet(true)) { + loadNativeLibsInternal(application) } } + private fun loadNativeLibsInternal(application: Application) { + SoLoader.init(application.applicationContext, OpenSourceMergedSoMapping) + load() + } + @JvmStatic @JvmOverloads fun initialize( @@ -79,6 +74,8 @@ class ReactNativeBrownfield private constructor(val reactHost: ReactHost) { options: HashMap, onJSBundleLoaded: OnJSBundleLoaded? = null ) { + loadNativeLibs(application) + val reactHost: ReactHost by lazy { getDefaultReactHost( context = application, diff --git a/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.post55.kt b/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.post55.kt index f7db6bef..57f628ba 100644 --- a/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.post55.kt +++ b/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.post55.kt @@ -6,14 +6,11 @@ import com.callstack.reactnativebrownfield.OnJSBundleLoaded import com.callstack.reactnativebrownfield.ReactNativeBrownfield import com.facebook.react.PackageList import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative import expo.modules.ApplicationLifecycleDispatcher import expo.modules.ExpoReactHostFactory object ReactNativeHostManager { fun initialize(application: Application, onJSBundleLoaded: OnJSBundleLoaded? = null) { - loadReactNative(application) - ApplicationLifecycleDispatcher.onApplicationCreate(application) val reactHost: ReactHost by lazy { diff --git a/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.pre55.kt b/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.pre55.kt index 67688768..c577aa09 100644 --- a/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.pre55.kt +++ b/packages/react-native-brownfield/src/expo-config-plugin/template/android/ReactNativeHostManager.pre55.kt @@ -6,7 +6,6 @@ import com.callstack.reactnativebrownfield.OnJSBundleLoaded import com.callstack.reactnativebrownfield.ReactNativeBrownfield import com.facebook.react.PackageList import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative import com.facebook.react.ReactPackage import com.facebook.react.defaults.DefaultReactNativeHost import expo.modules.ApplicationLifecycleDispatcher @@ -15,8 +14,6 @@ import expo.modules.ReactNativeHostWrapper object ReactNativeHostManager { fun initialize(application: Application, onJSBundleLoaded: OnJSBundleLoaded? = null) { - loadReactNative(application) - ApplicationLifecycleDispatcher.onApplicationCreate(application) val reactNativeHost = ReactNativeHostWrapper(