1diff --git a/packages/expo-modules-core/android/CMakeLists.txt b/packages/expo-modules-core/android/CMakeLists.txt 2index 7e69193064..64cd01f802 100644 3--- a/packages/expo-modules-core/android/CMakeLists.txt 4+++ b/packages/expo-modules-core/android/CMakeLists.txt 5@@ -5,7 +5,7 @@ project(expo-modules-core) 6 set(CMAKE_VERBOSE_MAKEFILE ON) 7 set(CMAKE_ANDROID_STL_TYPE c++_shared) 8 set(CMAKE_CXX_STANDARD 17) 9-set(PACKAGE_NAME "expo-modules-core") 10+set(PACKAGE_NAME "expo-modules-core_{VERSIONED_ABI_NAME}") 11 set(BUILD_DIR ${CMAKE_SOURCE_DIR}/build) 12 set(ignoreMe "${PROJECT_BUILD_DIR} ${REACT_ANDROID_BUILD_DIR} ${REACT_ANDROID_DIR}") 13 14@@ -92,14 +92,14 @@ find_library(LOG_LIB log) 15 if(${REACT_NATIVE_TARGET_VERSION} LESS 69) 16 find_library( 17 FOLLY_LIB 18- folly_json 19+ folly_json_{VERSIONED_ABI_NAME} 20 PATHS ${LIBRN_DIR} 21 NO_CMAKE_FIND_ROOT_PATH 22 ) 23 else() 24 find_library( 25 FOLLY_LIB 26- folly_runtime 27+ folly_runtime_{VERSIONED_ABI_NAME} 28 PATHS ${LIBRN_DIR} 29 NO_CMAKE_FIND_ROOT_PATH 30 ) 31@@ -114,35 +114,35 @@ find_library( 32 33 find_library( 34 JSI_LIB 35- jsi 36+ jsi_{VERSIONED_ABI_NAME} 37 PATHS ${LIBRN_DIR} 38 NO_CMAKE_FIND_ROOT_PATH 39 ) 40 41 find_library( 42 REACT_NATIVE_JNI_LIB 43- reactnativejni 44+ reactnativejni_{VERSIONED_ABI_NAME} 45 PATHS ${LIBRN_DIR} 46 NO_CMAKE_FIND_ROOT_PATH 47 ) 48 49 find_library( 50 REACT_NATIVE_MODULES_CORE 51- react_nativemodule_core 52+ react_nativemodule_core_{VERSIONED_ABI_NAME} 53 PATHS ${LIBRN_DIR} 54 NO_CMAKE_FIND_ROOT_PATH 55 ) 56 57 find_library( 58 HERMES_LIB 59- hermes 60+ hermes_{VERSIONED_ABI_NAME} 61 PATHS ${HERMES_SO_DIR} 62 NO_CMAKE_FIND_ROOT_PATH 63 ) 64 65 find_library( 66 JSEXECUTOR_LIB 67- jscexecutor 68+ jscexecutor_{VERSIONED_ABI_NAME} 69 PATHS ${LIBRN_DIR} 70 NO_CMAKE_FIND_ROOT_PATH 71 ) 72diff --git a/packages/expo-modules-core/android/build.gradle b/packages/expo-modules-core/android/build.gradle 73index 194f8ac980..8ceda7036e 100644 74--- a/packages/expo-modules-core/android/build.gradle 75+++ b/packages/expo-modules-core/android/build.gradle 76@@ -59,6 +59,10 @@ def REACT_NATIVE_DIR = REACT_NATIVE_BUILD_FROM_SOURCE 77 def REACT_NATIVE_SO_DIR = REACT_NATIVE_BUILD_FROM_SOURCE 78 ? Paths.get(findProject(":ReactAndroid").getProjectDir().toString(), "build", "intermediates", "library_*", "*", "jni") 79 : "${buildDir}/react-native-0*/jni" 80+REACT_NATIVE_DIR = "${rootDir}/versioned-react-native" 81+REACT_NATIVE_BUILD_FROM_SOURCE = false 82+REACT_NATIVE_SO_DIR = "${buildDir}/reactandroid-{VERSIONED_ABI_NAME}-*/jni" 83+def REACT_NATIVE_AAR_DIR = "${rootDir}/versioned-abis/expoview-{VERSIONED_ABI_NAME}/maven" 84 85 def reactProperties = new Properties() 86 file("$REACT_NATIVE_DIR/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) } 87@@ -326,7 +330,7 @@ task createNativeDepsDirectories() { 88 // JNI 89 def extractReactNativeAAR = { buildType -> 90 def suffix = buildType == 'Debug' ? '-debug' : '-release' 91- def rnAARs = fileTree(REACT_NATIVE_DIR).matching { include "**/react-native/**/*${suffix}.aar" } 92+ def rnAARs = fileTree(REACT_NATIVE_AAR_DIR).matching { include "**/*.aar" } 93 if (rnAARs.isEmpty()) { 94 rnAARs = fileTree(REACT_NATIVE_DIR).matching { include "**/react-native/**/*.aar" } 95 } 96diff --git a/packages/expo-modules-core/android/src/fabric/FabricComponentsRegistry.h b/packages/expo-modules-core/android/src/fabric/FabricComponentsRegistry.h 97index aaee960b00..53bbbe02b6 100644 98--- a/packages/expo-modules-core/android/src/fabric/FabricComponentsRegistry.h 99+++ b/packages/expo-modules-core/android/src/fabric/FabricComponentsRegistry.h 100@@ -9,7 +9,7 @@ namespace expo { 101 class FabricComponentsRegistry : public facebook::jni::HybridClass<FabricComponentsRegistry> { 102 public: 103 static auto constexpr 104- kJavaDescriptor = "Lexpo/modules/adapters/react/FabricComponentsRegistry;"; 105+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/adapters/react/FabricComponentsRegistry;"; 106 107 static void registerNatives(); 108 109diff --git a/packages/expo-modules-core/android/src/main/cpp/Exceptions.h b/packages/expo-modules-core/android/src/main/cpp/Exceptions.h 110index 607ed5c2b9..97684053ea 100644 111--- a/packages/expo-modules-core/android/src/main/cpp/Exceptions.h 112+++ b/packages/expo-modules-core/android/src/main/cpp/Exceptions.h 113@@ -24,7 +24,7 @@ class JSIInteropModuleRegistry; 114 */ 115 class CodedException : public jni::JavaClass<CodedException, jni::JThrowable> { 116 public: 117- static auto constexpr kJavaDescriptor = "Lexpo/modules/kotlin/exception/CodedException;"; 118+ static auto constexpr kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/exception/CodedException;"; 119 120 static jni::local_ref<CodedException> create(const std::string &message); 121 122@@ -39,7 +39,7 @@ public: 123 class JavaScriptEvaluateException 124 : public jni::JavaClass<JavaScriptEvaluateException, CodedException> { 125 public: 126- static auto constexpr kJavaDescriptor = "Lexpo/modules/kotlin/exception/JavaScriptEvaluateException;"; 127+ static auto constexpr kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/exception/JavaScriptEvaluateException;"; 128 129 static jni::local_ref<JavaScriptEvaluateException> create( 130 const std::string &message, 131@@ -53,7 +53,7 @@ public: 132 class UnexpectedException 133 : public jni::JavaClass<UnexpectedException, CodedException> { 134 public: 135- static auto constexpr kJavaDescriptor = "Lexpo/modules/kotlin/exception/UnexpectedException;"; 136+ static auto constexpr kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/exception/UnexpectedException;"; 137 138 static jni::local_ref<UnexpectedException> create( 139 const std::string &message 140diff --git a/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.cpp b/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.cpp 141index 53629da616..2ea542bb2d 100644 142--- a/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.cpp 143+++ b/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.cpp 144@@ -14,10 +14,10 @@ JNIFunctionBody::invoke(jobjectArray args) { 145 // Because of that, it can't be cached - we will try to invoke the nonexistent method 146 // if we receive an object of a different class than the one used to obtain the method id. 147 // The only cacheable method id can be obtain from the base class. 148- static const auto method = jni::findClassLocal("expo/modules/kotlin/jni/JNIFunctionBody") 149+ static const auto method = jni::findClassLocal("{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JNIFunctionBody") 150 ->getMethod<jni::local_ref<react::ReadableNativeArray::javaobject>(jobjectArray)>( 151 "invoke", 152- "([Ljava/lang/Object;)Lcom/facebook/react/bridge/ReadableNativeArray;" 153+ "([Ljava/lang/Object;)L{VERSIONED_ABI_NAME}/com/facebook/react/bridge/ReadableNativeArray;" 154 ); 155 156 return method(this->self(), args); 157@@ -32,7 +32,7 @@ void JNIAsyncFunctionBody::invoke( 158 // Because of that, it can't be cached - we will try to invoke the nonexistent method 159 // if we receive an object of a different class than the one used to obtain the method id. 160 // The only cacheable method id can be obtain from the base class. 161- static const auto method = jni::findClassLocal("expo/modules/kotlin/jni/JNIAsyncFunctionBody") 162+ static const auto method = jni::findClassLocal("{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JNIAsyncFunctionBody") 163 ->getMethod< 164 void(jobjectArray , jobject) 165 >( 166diff --git a/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.h b/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.h 167index 9125e980ee..a5a7b37fbb 100644 168--- a/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.h 169+++ b/packages/expo-modules-core/android/src/main/cpp/JNIFunctionBody.h 170@@ -15,7 +15,7 @@ namespace expo { 171 */ 172 class JNIFunctionBody : public jni::JavaClass<JNIFunctionBody> { 173 public: 174- static auto constexpr kJavaDescriptor = "Lexpo/modules/kotlin/jni/JNIFunctionBody;"; 175+ static auto constexpr kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JNIFunctionBody;"; 176 177 /** 178 * Invokes a Kotlin's implementation of this function. 179@@ -34,7 +34,7 @@ public: 180 */ 181 class JNIAsyncFunctionBody : public jni::JavaClass<JNIAsyncFunctionBody> { 182 public: 183- static auto constexpr kJavaDescriptor = "Lexpo/modules/kotlin/jni/JNIAsyncFunctionBody;"; 184+ static auto constexpr kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JNIAsyncFunctionBody;"; 185 186 /** 187 * Invokes a Kotlin's implementation of this async function. 188diff --git a/packages/expo-modules-core/android/src/main/cpp/JSIInteropModuleRegistry.h b/packages/expo-modules-core/android/src/main/cpp/JSIInteropModuleRegistry.h 189index ebd5c60547..c469341691 100644 190--- a/packages/expo-modules-core/android/src/main/cpp/JSIInteropModuleRegistry.h 191+++ b/packages/expo-modules-core/android/src/main/cpp/JSIInteropModuleRegistry.h 192@@ -27,7 +27,7 @@ namespace expo { 193 class JSIInteropModuleRegistry : public jni::HybridClass<JSIInteropModuleRegistry> { 194 public: 195 static auto constexpr 196- kJavaDescriptor = "Lexpo/modules/kotlin/jni/JSIInteropModuleRegistry;"; 197+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JSIInteropModuleRegistry;"; 198 static auto constexpr TAG = "JSIInteropModuleRegistry"; 199 200 static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis); 201diff --git a/packages/expo-modules-core/android/src/main/cpp/JavaReferencesCache.cpp b/packages/expo-modules-core/android/src/main/cpp/JavaReferencesCache.cpp 202index 21ea310271..43db4e425c 100644 203--- a/packages/expo-modules-core/android/src/main/cpp/JavaReferencesCache.cpp 204+++ b/packages/expo-modules-core/android/src/main/cpp/JavaReferencesCache.cpp 205@@ -25,8 +25,8 @@ void JavaReferencesCache::loadJClasses(JNIEnv *env) { 206 {"<init>", "(F)V"} 207 }); 208 209- loadJClass(env, "com/facebook/react/bridge/PromiseImpl", { 210- {"<init>", "(Lcom/facebook/react/bridge/Callback;Lcom/facebook/react/bridge/Callback;)V"} 211+ loadJClass(env, "{VERSIONED_ABI_NAME}/com/facebook/react/bridge/PromiseImpl", { 212+ {"<init>", "(L{VERSIONED_ABI_NAME}/com/facebook/react/bridge/Callback;L{VERSIONED_ABI_NAME}/com/facebook/react/bridge/Callback;)V"} 213 }); 214 215 loadJClass(env, "java/lang/Object", {}); 216diff --git a/packages/expo-modules-core/android/src/main/cpp/JavaScriptModuleObject.h b/packages/expo-modules-core/android/src/main/cpp/JavaScriptModuleObject.h 217index 4b1a65ecab..49d5a841db 100644 218--- a/packages/expo-modules-core/android/src/main/cpp/JavaScriptModuleObject.h 219+++ b/packages/expo-modules-core/android/src/main/cpp/JavaScriptModuleObject.h 220@@ -29,7 +29,7 @@ class JSIInteropModuleRegistry; 221 class JavaScriptModuleObject : public jni::HybridClass<JavaScriptModuleObject> { 222 public: 223 static auto constexpr 224- kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaScriptModuleObject;"; 225+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JavaScriptModuleObject;"; 226 static auto constexpr TAG = "JavaScriptModuleObject"; 227 228 static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis); 229diff --git a/packages/expo-modules-core/android/src/main/cpp/JavaScriptObject.h b/packages/expo-modules-core/android/src/main/cpp/JavaScriptObject.h 230index cebef459cb..2a92503c3b 100644 231--- a/packages/expo-modules-core/android/src/main/cpp/JavaScriptObject.h 232+++ b/packages/expo-modules-core/android/src/main/cpp/JavaScriptObject.h 233@@ -24,7 +24,7 @@ class JavaScriptValue; 234 class JavaScriptObject : public jni::HybridClass<JavaScriptObject>, JSIObjectWrapper { 235 public: 236 static auto constexpr 237- kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaScriptObject;"; 238+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JavaScriptObject;"; 239 static auto constexpr TAG = "JavaScriptObject"; 240 241 static void registerNatives(); 242diff --git a/packages/expo-modules-core/android/src/main/cpp/JavaScriptTypedArray.h b/packages/expo-modules-core/android/src/main/cpp/JavaScriptTypedArray.h 243index 099e2f6728..10f8fee8cd 100644 244--- a/packages/expo-modules-core/android/src/main/cpp/JavaScriptTypedArray.h 245+++ b/packages/expo-modules-core/android/src/main/cpp/JavaScriptTypedArray.h 246@@ -20,7 +20,7 @@ namespace jsi = facebook::jsi; 247 class JavaScriptTypedArray : public jni::HybridClass<JavaScriptTypedArray, JavaScriptObject> { 248 public: 249 static auto constexpr 250- kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaScriptTypedArray;"; 251+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JavaScriptTypedArray;"; 252 static auto constexpr TAG = "JavaScriptTypedArray"; 253 254 static void registerNatives(); 255diff --git a/packages/expo-modules-core/android/src/main/cpp/JavaScriptValue.h b/packages/expo-modules-core/android/src/main/cpp/JavaScriptValue.h 256index 506176ccba..fe9a0df850 100644 257--- a/packages/expo-modules-core/android/src/main/cpp/JavaScriptValue.h 258+++ b/packages/expo-modules-core/android/src/main/cpp/JavaScriptValue.h 259@@ -27,7 +27,7 @@ class JavaScriptTypedArray; 260 class JavaScriptValue : public jni::HybridClass<JavaScriptValue>, JSIValueWrapper { 261 public: 262 static auto constexpr 263- kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaScriptValue;"; 264+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/JavaScriptValue;"; 265 static auto constexpr TAG = "JavaScriptValue"; 266 267 static void registerNatives(); 268diff --git a/packages/expo-modules-core/android/src/main/cpp/MethodMetadata.cpp b/packages/expo-modules-core/android/src/main/cpp/MethodMetadata.cpp 269index 3478452a60..2fa4354727 100644 270--- a/packages/expo-modules-core/android/src/main/cpp/MethodMetadata.cpp 271+++ b/packages/expo-modules-core/android/src/main/cpp/MethodMetadata.cpp 272@@ -323,10 +323,10 @@ jsi::Function MethodMetadata::createPromiseBody( 273 JNIEnv *env = jni::Environment::current(); 274 275 auto &jPromise = JavaReferencesCache::instance()->getJClass( 276- "com/facebook/react/bridge/PromiseImpl"); 277+ "{VERSIONED_ABI_NAME}/com/facebook/react/bridge/PromiseImpl"); 278 jmethodID jPromiseConstructor = jPromise.getMethod( 279 "<init>", 280- "(Lcom/facebook/react/bridge/Callback;Lcom/facebook/react/bridge/Callback;)V" 281+ "(L{VERSIONED_ABI_NAME}/com/facebook/react/bridge/Callback;L{VERSIONED_ABI_NAME}/com/facebook/react/bridge/Callback;)V" 282 ); 283 284 // Creates a promise object 285diff --git a/packages/expo-modules-core/android/src/main/cpp/types/ExpectedType.h b/packages/expo-modules-core/android/src/main/cpp/types/ExpectedType.h 286index 9a722a051e..93c60369fc 100644 287--- a/packages/expo-modules-core/android/src/main/cpp/types/ExpectedType.h 288+++ b/packages/expo-modules-core/android/src/main/cpp/types/ExpectedType.h 289@@ -14,7 +14,7 @@ namespace expo { 290 */ 291 class SingleType : public jni::JavaClass<SingleType> { 292 static auto constexpr 293- kJavaDescriptor = "Lexpo/modules/kotlin/jni/SingleType;"; 294+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/SingleType;"; 295 }; 296 297 /** 298@@ -23,7 +23,7 @@ class SingleType : public jni::JavaClass<SingleType> { 299 class ExpectedType : public jni::JavaClass<ExpectedType> { 300 public: 301 static auto constexpr 302- kJavaDescriptor = "Lexpo/modules/kotlin/jni/ExpectedType;"; 303+ kJavaDescriptor = "L{VERSIONED_ABI_NAME}/expo/modules/kotlin/jni/ExpectedType;"; 304 305 CppType getCombinedTypes(); 306 }; 307