1 package com.helloworld;
2 
3 import android.app.Application;
4 import android.content.res.Configuration;
5 import androidx.annotation.NonNull;
6 
7 import com.facebook.react.PackageList;
8 import com.facebook.react.ReactApplication;
9 import com.facebook.react.ReactNativeHost;
10 import com.facebook.react.ReactPackage;
11 import com.facebook.react.config.ReactFeatureFlags;
12 import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
13 import com.facebook.react.defaults.DefaultReactNativeHost;
14 import com.facebook.soloader.SoLoader;
15 
16 import expo.modules.ApplicationLifecycleDispatcher;
17 import expo.modules.ReactNativeHostWrapper;
18 
19 import java.util.List;
20 
21 public class MainApplication extends Application implements ReactApplication {
22 
23   private final ReactNativeHost mReactNativeHost =
24     new ReactNativeHostWrapper(this, new DefaultReactNativeHost(this) {
25       @Override
26       public boolean getUseDeveloperSupport() {
27         return BuildConfig.DEBUG;
28       }
29 
30       @Override
31       protected List<ReactPackage> getPackages() {
32         @SuppressWarnings("UnnecessaryLocalVariable")
33         List<ReactPackage> packages = new PackageList(this).getPackages();
34         // Packages that cannot be autolinked yet can be added manually here, for example:
35         // packages.add(new MyReactNativePackage());
36         return packages;
37       }
38 
39       @Override
40       protected String getJSMainModuleName() {
41         return ".expo/.virtual-metro-entry";
42       }
43 
44       @Override
45       protected boolean isNewArchEnabled() {
46         return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
47       }
48 
49       @Override
50       protected Boolean isHermesEnabled() {
51         return BuildConfig.IS_HERMES_ENABLED;
52       }
53   });
54 
55   @Override
getReactNativeHost()56   public ReactNativeHost getReactNativeHost() {
57     return mReactNativeHost;
58   }
59 
60   @Override
onCreate()61   public void onCreate() {
62     super.onCreate();
63     SoLoader.init(this, /* native exopackage */ false);
64     if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {
65       ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false;
66     }
67     if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
68       // If you opted-in for the New Architecture, we load the native entry point for this app.
69       DefaultNewArchitectureEntryPoint.load();
70     }
71     ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
72     ApplicationLifecycleDispatcher.onApplicationCreate(this);
73   }
74 
75   @Override
onConfigurationChanged(@onNull Configuration newConfig)76   public void onConfigurationChanged(@NonNull Configuration newConfig) {
77     super.onConfigurationChanged(newConfig);
78     ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
79   }
80 }
81