diff --git a/packages/unimodules-app-loader/CHANGELOG.md b/packages/unimodules-app-loader/CHANGELOG.md index 6a294c6841ff4..e23a2d85f6842 100644 --- a/packages/unimodules-app-loader/CHANGELOG.md +++ b/packages/unimodules-app-loader/CHANGELOG.md @@ -7,3 +7,5 @@ ### 🎉 New features ### 🐛 Bug fixes + +- Fixed `appLoaderRegisteredForName` to not only check if a loader class name is in the cache for the provided name but also verifies that the cached and current class name match. When migrating from managed to bare, the class name cache needs to be updated. ([#8292](https://github.com/expo/expo/pull/8292) by [@thorbenprimke](https://github.com/thorbenprimke)) 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 75ac44cc04fd0..3f8393ee4b581 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 @@ -18,7 +18,7 @@ public static void registerLoader(Context context, String name, Class loaderClas public static void registerLoader(Context context, String name, Class loaderClass, boolean overload) { if (!overload) { - if (appLoaderRegisteredForName(context, name)) return; + if (appLoaderRegisteredForName(context, name, loaderClass)) return; } getSharedPreferences(context).edit() .putString(appLoaderKey(name), loaderClass.getName()) @@ -39,8 +39,9 @@ public static HeadlessAppLoader getLoader(String name, Context context) { return loaders.get(name); } - private static boolean appLoaderRegisteredForName(Context context, String name) { - return loaderClasses.containsKey(name) || getSharedPreferences(context).getString(appLoaderKey(name), null) != null; + 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); } private static void createLoader(String name, Context context) throws ClassNotFoundException, IllegalAccessException, InstantiationException, java.lang.reflect.InvocationTargetException, NoSuchMethodException {