Skip to content

Commit 843ac63

Browse files
committed
feat: Add Kotlin autolinker for React Native 0.63.x+
Issue: #7821
1 parent fad2a1b commit 843ac63

12 files changed

+533
-42
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.app;
2+
3+
import com.facebook.react.ReactActivity;
4+
import com.facebook.react.ReactActivityDelegate;
5+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
6+
import com.facebook.react.defaults.DefaultReactActivityDelegate;
7+
8+
public class MainActivity extends ReactActivity {
9+
10+
/**
11+
* Returns the name of the main component registered from JavaScript. This is used to schedule
12+
* rendering of the component.
13+
*/
14+
@Override
15+
protected String getMainComponentName() {
16+
return "App";
17+
}
18+
19+
/**
20+
* Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
21+
* DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
22+
* (aka React 18) with two boolean flags.
23+
*/
24+
@Override
25+
protected ReactActivityDelegate createReactActivityDelegate() {
26+
return new DefaultReactActivityDelegate(
27+
this,
28+
getMainComponentName(),
29+
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
30+
DefaultNewArchitectureEntryPoint.getFabricEnabled());
31+
}
32+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.app;
2+
3+
import android.app.Application;
4+
import com.facebook.react.PackageList;
5+
import com.facebook.react.ReactApplication;
6+
import com.facebook.react.ReactNativeHost;
7+
import com.facebook.react.ReactPackage;
8+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
9+
import com.facebook.react.defaults.DefaultReactNativeHost;
10+
import com.facebook.soloader.SoLoader;
11+
import java.util.List;
12+
13+
public class MainApplication extends Application implements ReactApplication {
14+
15+
private final ReactNativeHost mReactNativeHost =
16+
new DefaultReactNativeHost(this) {
17+
@Override
18+
public boolean getUseDeveloperSupport() {
19+
return BuildConfig.DEBUG;
20+
}
21+
22+
@Override
23+
protected List<ReactPackage> getPackages() {
24+
@SuppressWarnings("UnnecessaryLocalVariable")
25+
List<ReactPackage> packages = new PackageList(this).getPackages();
26+
// Packages that cannot be autolinked yet can be added manually here, for example:
27+
// packages.add(new MyReactNativePackage());
28+
return packages;
29+
}
30+
31+
@Override
32+
protected String getJSMainModuleName() {
33+
return "index";
34+
}
35+
36+
@Override
37+
protected boolean isNewArchEnabled() {
38+
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
39+
}
40+
41+
@Override
42+
protected Boolean isHermesEnabled() {
43+
return BuildConfig.IS_HERMES_ENABLED;
44+
}
45+
};
46+
47+
@Override
48+
public ReactNativeHost getReactNativeHost() {
49+
return mReactNativeHost;
50+
}
51+
52+
@Override
53+
public void onCreate() {
54+
super.onCreate();
55+
SoLoader.init(this, /* native exopackage */ false);
56+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
57+
// If you opted-in for the New Architecture, we load the native entry point for this app.
58+
DefaultNewArchitectureEntryPoint.load();
59+
}
60+
ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
61+
}
62+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.app
2+
3+
import com.facebook.react.ReactActivity
4+
import com.facebook.react.ReactActivityDelegate
5+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
6+
import com.facebook.react.defaults.DefaultReactActivityDelegate
7+
8+
class MainActivity : ReactActivity() {
9+
10+
/**
11+
* Returns the name of the main component registered from JavaScript. This is used to schedule
12+
* rendering of the component.
13+
*/
14+
override fun getMainComponentName(): String = "App"
15+
16+
/**
17+
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
18+
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
19+
*/
20+
override fun createReactActivityDelegate(): ReactActivityDelegate =
21+
DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
22+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.app
2+
3+
import android.app.Application
4+
import com.facebook.react.PackageList
5+
import com.facebook.react.ReactApplication
6+
import com.facebook.react.ReactHost
7+
import com.facebook.react.ReactNativeHost
8+
import com.facebook.react.ReactPackage
9+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
10+
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
11+
import com.facebook.react.defaults.DefaultReactNativeHost
12+
import com.facebook.react.flipper.ReactNativeFlipper
13+
import com.facebook.soloader.SoLoader
14+
15+
class MainApplication : Application(), ReactApplication {
16+
17+
override val reactNativeHost: ReactNativeHost =
18+
object : DefaultReactNativeHost(this) {
19+
override fun getPackages(): List<ReactPackage> =
20+
PackageList(this).packages.apply {
21+
// Packages that cannot be autolinked yet can be added manually here, for example:
22+
// add(MyReactNativePackage())
23+
}
24+
25+
override fun getJSMainModuleName(): String = "index"
26+
27+
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
28+
29+
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
30+
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
31+
}
32+
33+
override val reactHost: ReactHost
34+
get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
35+
36+
override fun onCreate() {
37+
super.onCreate()
38+
SoLoader.init(this, false)
39+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
40+
// If you opted-in for the New Architecture, we load the native entry point for this app.
41+
load()
42+
}
43+
ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
44+
}
45+
}

autolink/postlink/__snapshots__/activityLinker.test.js.snap

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ public class MainActivity extends NavigationActivity {
6767
"
6868
`;
6969

70-
7170
exports[`activityLinker should work for RN 0.71 1`] = `
7271
"package com.app;
7372
@@ -81,6 +80,40 @@ public class MainActivity extends NavigationActivity {
8180
8281
8382
83+
}
84+
"
85+
`;
86+
87+
exports[`activityLinker should work for RN 0.72 1`] = `
88+
"package com.app;
89+
90+
import com.reactnativenavigation.NavigationActivity;
91+
import com.facebook.react.ReactActivityDelegate;
92+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
93+
import com.facebook.react.defaults.DefaultReactActivityDelegate;
94+
95+
public class MainActivity extends NavigationActivity {
96+
97+
98+
99+
100+
}
101+
"
102+
`;
103+
104+
exports[`activityLinker should work for RN 0.73 1`] = `
105+
"package com.app
106+
107+
import com.reactnativenavigation.NavigationActivity
108+
import com.facebook.react.ReactActivityDelegate
109+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
110+
import com.facebook.react.defaults.DefaultReactActivityDelegate
111+
112+
class MainActivity : NavigationActivity() {
113+
114+
115+
116+
84117
}
85118
"
86119
`;
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`applicationLinker should work for RN 0.72 1`] = `
4+
"package com.app;
5+
6+
import android.app.Application;
7+
import com.facebook.react.PackageList;
8+
import com.reactnativenavigation.NavigationApplication;
9+
import com.facebook.react.ReactNativeHost;
10+
import com.facebook.react.ReactPackage;
11+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
12+
import com.facebook.react.defaults.DefaultReactNativeHost;
13+
import com.reactnativenavigation.react.NavigationReactNativeHost;
14+
import com.facebook.soloader.SoLoader;
15+
import java.util.List;
16+
17+
public class MainApplication extends NavigationApplication {
18+
19+
private final ReactNativeHost mReactNativeHost =
20+
new NavigationReactNativeHost(this) {
21+
@Override
22+
public boolean getUseDeveloperSupport() {
23+
return BuildConfig.DEBUG;
24+
}
25+
26+
@Override
27+
protected List<ReactPackage> getPackages() {
28+
@SuppressWarnings(\\"UnnecessaryLocalVariable\\")
29+
List<ReactPackage> packages = new PackageList(this).getPackages();
30+
// Packages that cannot be autolinked yet can be added manually here, for example:
31+
// packages.add(new MyReactNativePackage());
32+
return packages;
33+
}
34+
35+
@Override
36+
protected String getJSMainModuleName() {
37+
return \\"index\\";
38+
}
39+
40+
@Override
41+
protected boolean isNewArchEnabled() {
42+
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
43+
}
44+
45+
@Override
46+
protected Boolean isHermesEnabled() {
47+
return BuildConfig.IS_HERMES_ENABLED;
48+
}
49+
};
50+
51+
@Override
52+
public ReactNativeHost getReactNativeHost() {
53+
return mReactNativeHost;
54+
}
55+
56+
@Override
57+
public void onCreate() {
58+
super.onCreate();
59+
60+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
61+
// If you opted-in for the New Architecture, we load the native entry point for this app.
62+
DefaultNewArchitectureEntryPoint.load();
63+
}
64+
ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
65+
}
66+
}
67+
"
68+
`;
69+
70+
exports[`applicationLinker should work for RN 0.73 1`] = `
71+
"package com.app
72+
73+
import android.app.Application
74+
import com.facebook.react.PackageList
75+
import com.reactnativenavigation.NavigationApplication
76+
import com.facebook.react.ReactHost
77+
import com.facebook.react.ReactNativeHost
78+
import com.facebook.react.ReactPackage
79+
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
80+
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
81+
import com.facebook.react.defaults.DefaultReactNativeHost
82+
import com.reactnativenavigation.react.NavigationReactNativeHost
83+
import com.facebook.react.flipper.ReactNativeFlipper
84+
import com.facebook.soloader.SoLoader
85+
86+
class MainApplication : NavigationApplication() {
87+
88+
override val reactNativeHost: ReactNativeHost =
89+
object : NavigationReactNativeHost(this) {
90+
override fun getPackages(): List<ReactPackage> =
91+
PackageList(this).packages.apply {
92+
// Packages that cannot be autolinked yet can be added manually here, for example:
93+
// add(MyReactNativePackage())
94+
}
95+
96+
override fun getJSMainModuleName(): String = \\"index\\"
97+
98+
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
99+
100+
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
101+
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
102+
}
103+
104+
override val reactHost: ReactHost
105+
get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
106+
107+
override fun onCreate() {
108+
super.onCreate()
109+
110+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
111+
// If you opted-in for the New Architecture, we load the native entry point for this app.
112+
load()
113+
}
114+
ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
115+
}
116+
}
117+
"
118+
`;

0 commit comments

Comments
 (0)