1--- android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncLocalStorageUtil.java
2+++ android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncLocalStorageUtil.java
3@@ -159,7 +159,9 @@ public class AsyncLocalStorageUtil {
4     }
5
6     File nextStorageFile = ctx.getDatabasePath("AsyncStorage");
7-    File currentStorageFile = ctx.getDatabasePath(ReactDatabaseSupplier.DATABASE_NAME);
8+    // NOTE(kudo): Expo Go doesn't turn on next storage, having dummy db name to pass build
9+    // File currentStorageFile = ctx.getDatabasePath(ReactDatabaseSupplier.DATABASE_NAME);
10+    File currentStorageFile = ctx.getDatabasePath("UNUSED");
11     boolean isCheckpointRequired = !nextStorageFile.exists() && currentStorageFile.exists();
12     if (!isCheckpointRequired) {
13       Log.i("AsyncStorage_Next", "SQLite checkpoint not required.");
14--- android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageExpoMigration.java
15+++ android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageExpoMigration.java
16@@ -38,7 +38,8 @@ public class AsyncStorageExpoMigration {
17         try {
18             // Create the storage file
19             ReactDatabaseSupplier.getInstance(context).get();
20-            copyFile(new FileInputStream(expoDatabase), new FileOutputStream(context.getDatabasePath(ReactDatabaseSupplier.DATABASE_NAME)));
21+            // NOTE(kudo): Don't run migration on Expo Go for backward compatibility
22+            // copyFile(new FileInputStream(expoDatabase), new FileOutputStream(context.getDatabasePath(ReactDatabaseSupplier.DATABASE_NAME)));
23             Log.v(LOG_TAG, "Migrated most recently modified database " + expoDatabase.getName() + " to RKStorage");
24         } catch (Exception e) {
25             Log.v(LOG_TAG, "Failed to migrate scoped database " + expoDatabase.getName());
26@@ -62,7 +63,9 @@ public class AsyncStorageExpoMigration {
27     }
28
29     private static boolean isAsyncStorageDatabaseCreated(Context context) {
30-        return context.getDatabasePath(ReactDatabaseSupplier.DATABASE_NAME).exists();
31+        // NOTE(kudo): Don't run migration on Expo Go for backward compatibility
32+        // return context.getDatabasePath(ReactDatabaseSupplier.DATABASE_NAME).exists();
33+        return true;
34     }
35
36     // Find all database files that the user may have created while using Expo.
37--- android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java
38+++ android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java
39@@ -33,7 +33,7 @@ import java.util.concurrent.Executor;
40 import java.util.concurrent.Executors;
41
42 @ReactModule(name = AsyncStorageModule.NAME)
43-public final class AsyncStorageModule
44+public class AsyncStorageModule
45     extends ReactContextBaseJavaModule implements ModuleDataCleaner.Cleanable, LifecycleEventListener {
46
47   // changed name to not conflict with AsyncStorage from RN repo
48@@ -43,7 +43,7 @@ public final class AsyncStorageModule
49   // https://raw.githubusercontent.com/android/platform_external_sqlite/master/dist/sqlite3.c
50   private static final int MAX_SQL_KEYS = 999;
51
52-  private ReactDatabaseSupplier mReactDatabaseSupplier;
53+  public ReactDatabaseSupplier mReactDatabaseSupplier;
54   private boolean mShuttingDown = false;
55
56   private final SerialExecutor executor;
57@@ -66,7 +66,8 @@ public final class AsyncStorageModule
58     this.executor = new SerialExecutor(executor);
59     reactContext.addLifecycleEventListener(this);
60     // Creating the database MUST happen after the migration.
61-    mReactDatabaseSupplier = ReactDatabaseSupplier.getInstance(reactContext);
62+    // NOTE(kudo): ExponentAsyncStorageModule will setup the `mReactDatabaseSupplier`
63+     mReactDatabaseSupplier = ReactDatabaseSupplier.getInstance(reactContext);
64   }
65
66   @Override
67--- android/src/main/java/com/reactnativecommunity/asyncstorage/ReactDatabaseSupplier.java
68+++ android/src/main/java/com/reactnativecommunity/asyncstorage/ReactDatabaseSupplier.java
69@@ -22,7 +22,9 @@ import javax.annotation.Nullable;
70 public class ReactDatabaseSupplier extends SQLiteOpenHelper {
71
72   // VisibleForTesting
73-  public static final String DATABASE_NAME = "RKStorage";
74+  // NOTE(kudo): Dynamic database name for scoped async storage
75+  // public static final String DATABASE_NAME = "RKStorage";
76+  public String DATABASE_NAME = "RKStorage";
77
78   private static final int DATABASE_VERSION = 1;
79   private static final int SLEEP_TIME_MS = 30;
80@@ -44,8 +46,19 @@ public class ReactDatabaseSupplier extends SQLiteOpenHelper {
81   private long mMaximumDatabaseSize =  BuildConfig.AsyncStorage_db_size * 1024L * 1024L;
82
83   private ReactDatabaseSupplier(Context context) {
84-    super(context, DATABASE_NAME, null, DATABASE_VERSION);
85+    // NOTE(kudo): Dynamic database name for scoped async storage
86+    // super(context, databaseName, null, DATABASE_VERSION);
87+    // mContext = context;
88+    super(context, "RKStorage", null, DATABASE_VERSION);
89     mContext = context;
90+    DATABASE_NAME = "RKStorage";
91+  }
92+
93+  // NOTE(kudo): Dynamic database name for scoped async storage
94+  public ReactDatabaseSupplier(Context context, String databaseName) {
95+    super(context, databaseName, null, DATABASE_VERSION);
96+    mContext = context;
97+    DATABASE_NAME = databaseName;
98   }
99
100   public static ReactDatabaseSupplier getInstance(Context context) {
101