1diff --git a/packages/expo-gl/android/CMakeLists.txt b/packages/expo-gl/android/CMakeLists.txt
2index 7e7547b603..5bc387fcfd 100644
3--- a/packages/expo-gl/android/CMakeLists.txt
4+++ b/packages/expo-gl/android/CMakeLists.txt
5@@ -5,7 +5,7 @@ set(CMAKE_ANDROID_STL_TYPE c++_shared)
6 set(CMAKE_VERBOSE_MAKEFILE ON)
7 set(CMAKE_CXX_STANDARD 17)
8
9-set(PACKAGE_NAME "expo-gl")
10+set(PACKAGE_NAME "expo-gl_{VERSIONED_ABI_NAME}")
11 set(BUILD_DIR ${CMAKE_SOURCE_DIR}/build)
12 set(COMMON_DIR ${CMAKE_SOURCE_DIR}/../common)
13
14@@ -40,7 +40,7 @@ target_include_directories(
15                             "${COMMON_DIR}")
16
17 find_library(
18-    JSI_LIB jsi
19+    JSI_LIB jsi_{VERSIONED_ABI_NAME}
20     PATHS ${LIBRN_DIR}
21     NO_CMAKE_FIND_ROOT_PATH)
22
23diff --git a/packages/expo-gl/android/build.gradle b/packages/expo-gl/android/build.gradle
24index 78594d264b..eeab79bf64 100644
25--- a/packages/expo-gl/android/build.gradle
26+++ b/packages/expo-gl/android/build.gradle
27@@ -13,6 +13,10 @@ def RN_SO_DIR = RN_BUILD_FROM_SOURCE
28     ? Paths.get(findProject(":ReactAndroid").getProjectDir().toString(), "build", "intermediates", "library_*", "*", "jni")
29     : "${buildDir}/react-native-0*/jni"
30 def RN_AAR_DIR = "${REACT_NATIVE_DIR}/android"
31+REACT_NATIVE_DIR = "${rootDir}/versioned-react-native"
32+RN_BUILD_FROM_SOURCE = false
33+RN_SO_DIR = "${buildDir}/reactandroid-{VERSIONED_ABI_NAME}-*/jni"
34+RN_AAR_DIR = "${rootDir}/versioned-abis/expoview-{VERSIONED_ABI_NAME}/maven"
35 def reactNativeArchitectures() {
36     def value = project.getProperties().get("reactNativeArchitectures")
37     return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
38@@ -139,7 +143,7 @@ dependencies {
39
40 def extractReactNativeAAR = { buildType ->
41   def suffix = buildType == 'Debug' ? '-debug' : '-release'
42-  def rnAARs = fileTree(RN_AAR_DIR).matching { include "**/react-native/**/*${suffix}.aar" }
43+  def rnAARs = fileTree(RN_AAR_DIR).matching { include "**/*.aar" }
44   if (rnAARs.isEmpty()) {
45     rnAARs = fileTree(RN_AAR_DIR).matching { include "**/react-native/**/*.aar" }
46   }
47diff --git a/packages/expo-gl/android/src/main/cpp/EXGLJniApi.cpp b/packages/expo-gl/android/src/main/cpp/EXGLJniApi.cpp
48index e9211d47ad..6b2c3fbb85 100644
49--- a/packages/expo-gl/android/src/main/cpp/EXGLJniApi.cpp
50+++ b/packages/expo-gl/android/src/main/cpp/EXGLJniApi.cpp
51@@ -15,13 +15,13 @@ extern "C" {
52 thread_local JNIEnv* threadLocalEnv;
53
54 JNIEXPORT jint JNICALL
55-Java_expo_modules_gl_cpp_EXGL_EXGLContextCreate
56+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextCreate
57 (JNIEnv *env, jclass clazz) {
58   return EXGLContextCreate();
59 }
60
61 JNIEXPORT void JNICALL
62-Java_expo_modules_gl_cpp_EXGL_EXGLContextPrepare
63+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextPrepare
64 (JNIEnv *env, jclass clazz, jlong jsiPtr, jint exglCtxId, jobject glContext) {
65   threadLocalEnv = env;
66   jclass GLContextClass = env->GetObjectClass(glContext);
67@@ -35,55 +35,55 @@ Java_expo_modules_gl_cpp_EXGL_EXGLContextPrepare
68 }
69
70 JNIEXPORT void JNICALL
71-Java_expo_modules_gl_cpp_EXGL_EXGLContextDestroy
72+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextDestroy
73 (JNIEnv *env, jclass clazz, jint exglCtxId) {
74   EXGLContextDestroy(exglCtxId);
75 }
76
77 JNIEXPORT void JNICALL
78-Java_expo_modules_gl_cpp_EXGL_EXGLContextFlush
79+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextFlush
80 (JNIEnv *env, jclass clazz, jint exglCtxId) {
81   EXGLContextFlush(exglCtxId);
82 }
83
84 JNIEXPORT jint JNICALL
85-Java_expo_modules_gl_cpp_EXGL_EXGLContextCreateObject
86+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextCreateObject
87 (JNIEnv *env, jclass clazz, jint exglCtxId) {
88   return EXGLContextCreateObject(exglCtxId);
89 }
90
91 JNIEXPORT void JNICALL
92-Java_expo_modules_gl_cpp_EXGL_EXGLContextDestroyObject
93+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextDestroyObject
94 (JNIEnv *env, jclass clazz, jint exglCtxId, jint exglObjId) {
95   EXGLContextDestroyObject(exglCtxId, exglObjId);
96 }
97
98 JNIEXPORT void JNICALL
99-Java_expo_modules_gl_cpp_EXGL_EXGLContextMapObject
100+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextMapObject
101 (JNIEnv *env, jclass clazz, jint exglCtxId, jint exglObjId, jint glObj) {
102   EXGLContextMapObject(exglCtxId, exglObjId, glObj);
103 }
104
105 JNIEXPORT jint JNICALL
106-Java_expo_modules_gl_cpp_EXGL_EXGLContextGetObject
107+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextGetObject
108 (JNIEnv *env, jclass clazz, jint exglCtxId, jint exglObjId) {
109   return EXGLContextGetObject(exglCtxId, exglObjId);
110 }
111
112 JNIEXPORT void JNICALL
113-Java_expo_modules_gl_cpp_EXGL_EXGLRegisterThread
114+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLRegisterThread
115 (JNIEnv *env, jclass clazz) {
116   threadLocalEnv = env;
117 }
118
119 JNIEXPORT bool JNICALL
120-Java_expo_modules_gl_cpp_EXGL_EXGLContextNeedsRedraw
121+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextNeedsRedraw
122 (JNIEnv *env, jclass clazz, jint exglCtxId) {
123   return EXGLContextNeedsRedraw(exglCtxId);
124 }
125
126 JNIEXPORT void JNICALL
127-Java_expo_modules_gl_cpp_EXGL_EXGLContextDrawEnded
128+Java_{VERSIONED_ABI_NAME_JNI_ESCAPED}_expo_modules_gl_cpp_EXGL_EXGLContextDrawEnded
129 (JNIEnv *env, jclass clazz, jint exglCtxId) {
130   EXGLContextDrawEnded(exglCtxId);
131 }
132