A Play release goes to a track: internal testing (internal in eas.json, up to 100 listed testers, available minutes after upload), closed testing (alpha, invited testers), open testing (beta, anyone who joins from the listing) and production. The others wait for Google's review, and a build moves between tracks by promotion, without a new upload. In production, start a staged rollout at a few percent, which can be halted if crash reports rise.
Play App Signing gave Play's September 2026 rules: new apps and updates must target API 36, and native libraries must support 16 KB memory pages. A React Native 36,878 app is mostly native libraries, from React Native, Hermes 11,328 and every module with C++ code, so check both on BookNest's signed APK from Publishing BookNest:
APK=android/app/build/outputs/apk/release/app-release.apk
aapt2 dump badging $APK | grep -o "targetSdkVersion:'[0-9]*'"
zipalign -c -P 16 -v 4 $APK | grep -c "arm64-v8a/.*(OK"
zipalign -c -P 16 -v 4 $APK | grep -E "arm64-v8a/lib(hermesvm|reactnative)\.so|Verification"targetSdkVersion:'36' 31 36274176 lib/arm64-v8a/libhermesvm.so (OK) 41598976 lib/arm64-v8a/libreactnative.so (OK) Verification successful
Expo SDK 57 6,418 targets API 36, and all 31 arm64 libraries, Hermes and React Native among them, sit on 16 KB boundaries inside the APK (the number before each name is its offset). The objdump check of Play App Signing also found every load segment of all 31 aligned to 2**14. A library that fails either check needs an update of that library, since its segment alignment is fixed when it is linked. Check again whenever you add a C++ module.