diff --git a/android/expoview/src/main/AndroidManifest.xml b/android/expoview/src/main/AndroidManifest.xml
index 50be3c41656ee..9ebf0551156fa 100644
--- a/android/expoview/src/main/AndroidManifest.xml
+++ b/android/expoview/src/main/AndroidManifest.xml
@@ -106,6 +106,11 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
+
+
diff --git a/android/expoview/src/main/java/host/exp/exponent/ExpoApplication.java b/android/expoview/src/main/java/host/exp/exponent/ExpoApplication.java
index 40035a7e60d52..9c1fd4dd1f823 100644
--- a/android/expoview/src/main/java/host/exp/exponent/ExpoApplication.java
+++ b/android/expoview/src/main/java/host/exp/exponent/ExpoApplication.java
@@ -53,8 +53,6 @@ public void onCreate() {
if (!Constants.isStandaloneApp()) {
KernelConstants.MAIN_ACTIVITY_CLASS = LauncherActivity.class;
}
-
- AppLoaderProvider.registerLoader(this, "react-native-headless", ExpoHeadlessAppLoader.class);
KernelProvider.setFactory(new KernelProvider.KernelFactory() {
@Override
public KernelInterface create() {
@@ -62,7 +60,7 @@ public KernelInterface create() {
}
});
- ExponentKernelModuleProvider.setFactory(reactContext -> new ExponentKernelModule(reactContext));
+ ExponentKernelModuleProvider.setFactory(ExponentKernelModule::new);
Exponent.initialize(this, this);
NativeModuleDepsProvider.getInstance().add(Kernel.class, KernelProvider.getInstance());
diff --git a/android/versioned-abis/expoview-abi37_0_0/src/main/java/abi37_0_0/org/unimodules/adapters/react/ReactAdapterPackage.java b/android/versioned-abis/expoview-abi37_0_0/src/main/java/abi37_0_0/org/unimodules/adapters/react/ReactAdapterPackage.java
index b2ac8831b4941..93e9258d1d1f1 100644
--- a/android/versioned-abis/expoview-abi37_0_0/src/main/java/abi37_0_0/org/unimodules/adapters/react/ReactAdapterPackage.java
+++ b/android/versioned-abis/expoview-abi37_0_0/src/main/java/abi37_0_0/org/unimodules/adapters/react/ReactAdapterPackage.java
@@ -26,7 +26,6 @@ public class ReactAdapterPackage extends BasePackage {
@Override
public List createInternalModules(Context context) {
- AppLoaderProvider.registerLoader(context, "react-native-headless", RNHeadlessAppLoader.class);
// We can force-cast here, because this package will only be used in React Native context.
ReactContext reactContext = (ReactContext) context;
return Arrays.asList(
diff --git a/packages/@unimodules/react-native-adapter/android/src/main/AndroidManifest.xml b/packages/@unimodules/react-native-adapter/android/src/main/AndroidManifest.xml
index e63893dfe2b96..ad5d93b80b46d 100644
--- a/packages/@unimodules/react-native-adapter/android/src/main/AndroidManifest.xml
+++ b/packages/@unimodules/react-native-adapter/android/src/main/AndroidManifest.xml
@@ -1,5 +1,11 @@
+
-
+
+
+
diff --git a/packages/@unimodules/react-native-adapter/android/src/main/java/org/unimodules/adapters/react/ReactAdapterPackage.java b/packages/@unimodules/react-native-adapter/android/src/main/java/org/unimodules/adapters/react/ReactAdapterPackage.java
index 4613be46e7771..20fd42d8a2ec6 100644
--- a/packages/@unimodules/react-native-adapter/android/src/main/java/org/unimodules/adapters/react/ReactAdapterPackage.java
+++ b/packages/@unimodules/react-native-adapter/android/src/main/java/org/unimodules/adapters/react/ReactAdapterPackage.java
@@ -26,7 +26,6 @@ public class ReactAdapterPackage extends BasePackage {
@Override
public List createInternalModules(Context context) {
- AppLoaderProvider.registerLoader(context, "react-native-headless", RNHeadlessAppLoader.class);
// We can force-cast here, because this package will only be used in React Native context.
ReactContext reactContext = (ReactContext) context;
return Arrays.asList(
diff --git a/packages/unimodules-app-loader/android/src/main/java/org/unimodules/apploader/AppLoaderProvider.java b/packages/unimodules-app-loader/android/src/main/java/org/unimodules/apploader/AppLoaderProvider.java
index d12b36634c96f..ea5ac4cbf818b 100644
--- a/packages/unimodules-app-loader/android/src/main/java/org/unimodules/apploader/AppLoaderProvider.java
+++ b/packages/unimodules-app-loader/android/src/main/java/org/unimodules/apploader/AppLoaderProvider.java
@@ -1,7 +1,7 @@
package org.unimodules.apploader;
import android.content.Context;
-import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.util.Log;
import java.util.HashMap;
@@ -9,23 +9,8 @@
public class AppLoaderProvider {
- private static Map loaderClasses = new HashMap<>();
private static Map loaders = new HashMap<>();
- public static void registerLoader(Context context, String name, Class loaderClass) {
- registerLoader(context, name, loaderClass, false);
- }
-
- public static void registerLoader(Context context, String name, Class loaderClass, boolean overload) {
- if (!overload) {
- if (appLoaderRegisteredForName(context, name, loaderClass)) return;
- }
- getSharedPreferences(context).edit()
- .putString(appLoaderKey(name), loaderClass.getName())
- .apply();
- loaderClasses.put(name, loaderClass);
- }
-
public static HeadlessAppLoader getLoader(String name, Context context) {
if (!loaders.containsKey(name)) {
try {
@@ -39,32 +24,21 @@ public static HeadlessAppLoader getLoader(String name, Context context) {
return loaders.get(name);
}
- private static boolean appLoaderRegisteredForName(Context context, String name, Class loaderClass) {
- String cachedClassName = getSharedPreferences(context).getString(appLoaderKey(name), null);
- return loaderClasses.containsKey(name) && loaderClass.getName().equals(cachedClassName);
- }
-
+ @SuppressWarnings("unchecked")
private static void createLoader(String name, Context context) throws ClassNotFoundException, IllegalAccessException, InstantiationException, java.lang.reflect.InvocationTargetException, NoSuchMethodException {
- Class loaderClass = loaderClasses.get(name);
- if (loaderClass == null) {
- String loaderClassName = getSharedPreferences(context)
- .getString(appLoaderKey(name), null);
+ Class extends HeadlessAppLoader> loaderClass;
+ try {
+ String loaderClassName = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA).metaData.getString("org.unimodules.core.AppLoader#" + name);
if (loaderClassName != null) {
- loaderClass = Class.forName(loaderClassName);
+ loaderClass = (Class extends HeadlessAppLoader>)Class.forName(loaderClassName);
+ loaders.put(name, (HeadlessAppLoader) loaderClass.getDeclaredConstructor(Context.class).newInstance(context));
+ } else {
+ throw new IllegalStateException("Unable to instantiate AppLoader!");
}
+ } catch (PackageManager.NameNotFoundException e) {
+ throw new IllegalStateException("Unable to instantiate AppLoader!", e);
}
- loaders.put(name, (HeadlessAppLoader) loaderClass.getDeclaredConstructor(Context.class).newInstance(context));
- }
-
- private static final String APP_LOADER_PREFERENCES_NAME = "appLoader_config";
- private static final String KEY_LOADER_PREFIX = "appLoader_";
-
- private static String appLoaderKey(String appLoaderName) {
- return KEY_LOADER_PREFIX + appLoaderName;
- }
- private static SharedPreferences getSharedPreferences(Context context) {
- return context.getSharedPreferences(APP_LOADER_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
public static abstract class Callback {