From 8223f9b21755904e960c41858ef09dcd7fa3c6ad Mon Sep 17 00:00:00 2001 From: Thorben Primke Date: Wed, 13 May 2020 12:35:13 -0700 Subject: [PATCH] [unimodules-app-loader] Fixes Class Name Cache --- packages/unimodules-app-loader/CHANGELOG.md | 2 ++ .../java/org/unimodules/apploader/AppLoaderProvider.java | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) 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 {