Skip to content

Commit 42c9120

Browse files
authored
fix(android): build fixes for 0.81 (#2507)
1 parent 7b48102 commit 42c9120

File tree

12 files changed

+171
-27
lines changed

12 files changed

+171
-27
lines changed

android/app/build.gradle

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,11 @@ android {
196196

197197
!enableNewArchitecture
198198
? "src/old-arch/java"
199-
: reactNativeVersion >= v(0, 73, 0)
200-
? "src/new-arch-0.73/java"
201-
: "src/new-arch/java",
199+
: reactNativeVersion >= v(0, 81, 0)
200+
? "src/new-arch-0.81/java"
201+
: reactNativeVersion >= v(0, 73, 0)
202+
? "src/new-arch-0.73/java"
203+
: "src/new-arch/java",
202204

203205
// TODO: Remove this block when we drop support for 0.74
204206
// https://github.com/facebook/react-native/commit/3283202248a36dbda553745afc46a3e3e2ab41a6

android/app/src/main/java/com/microsoft/reacttestapp/component/ComponentBottomSheetDialogFragment.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import android.os.Bundle
44
import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
7-
import com.facebook.react.ReactApplication
7+
import com.facebook.react.ReactActivity
88
import com.facebook.react.ReactRootView
9+
import com.facebook.react.interfaces.fabric.ReactSurface
910
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
1011
import com.microsoft.reacttestapp.BuildConfig
1112

@@ -30,19 +31,33 @@ class ComponentBottomSheetDialogFragment : BottomSheetDialogFragment() {
3031
}
3132
}
3233

34+
private var surface: ReactSurface? = null
35+
3336
override fun onCreateView(
3437
inflater: LayoutInflater,
3538
container: ViewGroup?,
3639
savedInstanceState: Bundle?
3740
): View {
38-
val reactApplication = requireActivity().application as ReactApplication
39-
return ReactRootView(context).apply {
40-
setIsFabric(BuildConfig.REACTAPP_USE_FABRIC)
41-
startReactApplication(
42-
reactApplication.reactNativeHost.reactInstanceManager,
43-
requireArguments().getString(NAME),
41+
val activity = requireActivity() as ReactActivity
42+
if (BuildConfig.REACTAPP_USE_BRIDGELESS) {
43+
val surface = activity.reactActivityDelegate.reactHost?.createSurface(
44+
activity,
45+
requireNotNull(requireArguments().getString(NAME)),
4446
requireArguments().getBundle(INITIAL_PROPERTIES)
4547
)
48+
this.surface = requireNotNull(surface)
49+
surface.start()
50+
return surface.view as View
51+
} else {
52+
return ReactRootView(context).apply {
53+
setIsFabric(BuildConfig.REACTAPP_USE_FABRIC)
54+
@Suppress("DEPRECATION")
55+
startReactApplication(
56+
activity.reactActivityDelegate.reactInstanceManager,
57+
requireArguments().getString(NAME),
58+
requireArguments().getBundle(INITIAL_PROPERTIES)
59+
)
60+
}
4661
}
4762
}
4863
}

android/app/src/main/java/com/microsoft/reacttestapp/react/TestAppReactNativeHost.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import android.app.Application
55
import android.app.Application.ActivityLifecycleCallbacks
66
import android.content.Context
77
import android.content.Intent
8-
import android.net.Uri
98
import android.os.Bundle
9+
import androidx.core.net.toUri
1010
import com.facebook.hermes.reactexecutor.HermesExecutorFactory
1111
import com.facebook.react.PackageList
1212
import com.facebook.react.ReactInstanceEventListener
@@ -19,7 +19,6 @@ import com.facebook.react.packagerconnection.PackagerConnectionSettings
1919
import com.microsoft.reacttestapp.BuildConfig
2020
import com.microsoft.reacttestapp.MainActivity
2121
import com.microsoft.reacttestapp.R
22-
import com.microsoft.reacttestapp.compat.ReactNativeHostCompat
2322
import java.lang.ref.WeakReference
2423
import java.util.Collections.synchronizedList
2524
import java.util.concurrent.CountDownLatch
@@ -44,10 +43,11 @@ sealed class BundleSource {
4443
}
4544
}
4645

46+
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
4747
class TestAppReactNativeHost(
4848
application: Application,
4949
private val reactBundleNameProvider: ReactBundleNameProvider
50-
) : ReactNativeHostCompat(application) {
50+
) : com.microsoft.reacttestapp.compat.ReactNativeHostCompat(application) {
5151
val jsExecutorName: String
5252
get() = javaScriptExecutorFactory.toString()
5353

@@ -146,7 +146,7 @@ class TestAppReactNativeHost(
146146
}
147147

148148
fun reloadJSFromServer(activity: Activity, bundleURL: String) {
149-
val uri = Uri.parse(bundleURL)
149+
val uri = bundleURL.toUri()
150150
PackagerConnectionSettings(activity).debugServerHost =
151151
if (uri.port > 0) {
152152
"${uri.host}:${uri.port}"

android/app/src/main/jni/AutolinkingCompat.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
#ifndef REACTAPP_JNI_AUTOLINKINGCOMPAT_H_
22
#define REACTAPP_JNI_AUTOLINKINGCOMPAT_H_
33

4+
#if __has_include(<FBReactNativeSpec.h>) // >= 0.81
5+
6+
#include <FBReactNativeSpec.h>
7+
8+
#define rncore_ModuleProvider facebook::react::FBReactNativeSpec_ModuleProvider
9+
10+
#else // < 0.81
11+
12+
#include <rncore.h>
13+
14+
#endif // __has_include(<FBReactNativeSpec.h>) // >= 0.81
15+
416
#if __has_include(<autolinking.h>) // >= 0.75
517

618
#include <autolinking.h>

android/app/src/main/jni/OnLoad.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
#include <DefaultComponentsRegistry.h>
55
#include <DefaultTurboModuleManagerDelegate.h>
6-
#include <rncore.h>
76

87
#include <fbjni/fbjni.h>
98

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.microsoft.reacttestapp.compat
2+
3+
import android.app.Application
4+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint
5+
import com.facebook.react.defaults.DefaultReactNativeHost
6+
import com.facebook.soloader.SoLoader
7+
import com.microsoft.reacttestapp.BuildConfig
8+
9+
abstract class ReactNativeHostCompat(application: Application) :
10+
DefaultReactNativeHost(application) {
11+
12+
companion object {
13+
init {
14+
DefaultNewArchitectureEntryPoint.load()
15+
SoLoader.loadLibrary("reacttestapp_appmodules")
16+
}
17+
}
18+
19+
override val isNewArchEnabled: Boolean = BuildConfig.REACTAPP_USE_FABRIC
20+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.microsoft.reacttestapp.fabric
2+
3+
import com.facebook.jni.HybridData
4+
import com.facebook.proguard.annotations.DoNotStrip
5+
import com.facebook.react.fabric.ComponentFactory
6+
import com.facebook.soloader.SoLoader
7+
8+
/**
9+
* The corresponding C++ implementation is in `android/app/src/main/jni/ComponentsRegistry.cpp`
10+
*/
11+
@DoNotStrip
12+
class ComponentsRegistry @DoNotStrip private constructor(componentFactory: ComponentFactory) {
13+
14+
companion object {
15+
@DoNotStrip
16+
fun register(componentFactory: ComponentFactory): ComponentsRegistry =
17+
ComponentsRegistry(componentFactory)
18+
19+
init {
20+
SoLoader.loadLibrary("fabricjni")
21+
SoLoader.loadLibrary("reacttestapp_appmodules")
22+
}
23+
}
24+
25+
@DoNotStrip
26+
private val mHybridData: HybridData
27+
28+
@DoNotStrip
29+
private external fun initHybrid(componentFactory: ComponentFactory): HybridData
30+
31+
init {
32+
mHybridData = initHybrid(componentFactory)
33+
}
34+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.microsoft.reacttestapp.turbomodule
2+
3+
import com.facebook.jni.HybridData
4+
import com.facebook.react.ReactPackage
5+
import com.facebook.react.ReactPackageTurboModuleManagerDelegate
6+
import com.facebook.react.bridge.ReactApplicationContext
7+
8+
/**
9+
* These type aliases are here to prevent `@react-native-community/cli` from
10+
* marking them as native modules to autolink.
11+
*
12+
* See also `matchClassName` in
13+
* https://github.com/react-native-community/cli/blob/8.x/packages/platform-android/src/config/findPackageClassName.ts#L25
14+
*/
15+
typealias PackagesList = List<ReactPackage>
16+
typealias ReactTurboModuleManagerDelegate = ReactPackageTurboModuleManagerDelegate
17+
typealias ReactTurboModuleManagerDelegateBuilder = ReactPackageTurboModuleManagerDelegate.Builder
18+
19+
/**
20+
* The corresponding C++ implementation is in `android/app/src/main/jni/TurboModuleManagerDelegate.cpp`
21+
*/
22+
class TurboModuleManagerDelegate protected constructor(
23+
reactApplicationContext: ReactApplicationContext,
24+
packages: PackagesList
25+
) : ReactTurboModuleManagerDelegate(reactApplicationContext, packages) {
26+
27+
external override fun initHybrid(): HybridData
28+
29+
external fun canCreateTurboModule(moduleName: String?): Boolean
30+
31+
class Builder : ReactTurboModuleManagerDelegateBuilder() {
32+
override fun build(
33+
context: ReactApplicationContext,
34+
packages: PackagesList
35+
): TurboModuleManagerDelegate = TurboModuleManagerDelegate(context, packages)
36+
}
37+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
package com.microsoft.reacttestapp.compat
22

3+
@Suppress("DEPRECATION")
34
typealias ReactNativeHostCompat = com.facebook.react.ReactNativeHost

android/app/src/reactapplication-0.76/java/com/microsoft/reacttestapp/TestApp.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class TestApp :
2929
override val reactHost: ReactHost
3030
get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
3131

32+
@Suppress("OVERRIDE_DEPRECATION")
3233
override val reactNativeHost: TestAppReactNativeHost
3334
get() = reactNativeHostInternal
3435

0 commit comments

Comments
 (0)