fix(android): drop x86 ABI from production AAB to satisfy Play 64-bit rule#30642
Conversation
… rule PR #30590 excluded x86_64 from the production AAB to silence Play's 16 KB page-size warning. That left the release configured for three ABIs: armeabi-v7a, arm64-v8a, and x86. This now violates Play's 64-bit requirement, which mandates that every 32-bit ABI shipped must be paired with its 64-bit equivalent: - armeabi-v7a (32-bit ARM) <-> arm64-v8a (64-bit ARM) -> paired - x86 (32-bit x86) <-> x86_64 (64-bit x86) -> unpaired Shipping x86 alone (without x86_64) trips the rule, and Play rejected the bundle with: "This release is not compliant with the Google Play 64-bit requirement." Drop x86 from gradle.properties.release so the production AAB ships ARM-only (armeabi-v7a + arm64-v8a). This satisfies both: - 64-bit rule: armeabi-v7a is paired with arm64-v8a; no unpaired 32-bit ABI remains. - 16 KB rule: no x86_64 means no x86_64 libconceal.so / libsecp256k1.so warnings. User impact is essentially zero: x86 Android phones haven't shipped since ~2016, and any modern Chromebook or emulator that could run x86 is also arm64- or x86_64-capable, so Play would pick one of those instead. gradle.properties.github.dual-versions has already been using armeabi-v7a,arm64-v8a as the production-equivalent target, so this just brings the main release config in line. Untouched: - android/gradle.properties (default, local dev) still ships all four ABIs for emulator support. - android/gradle.properties.github (CI E2E) still uses x86_64. - android/app/build.gradle's abiFilters plumbing picks up the new list automatically. Co-authored-by: Cursor <cursoragent@cursor.com>
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection: This change:
No E2E tests need to run to validate this change, as it has no bearing on app behavior or test infrastructure. Performance Test Selection: |
|



Description
After #30590 excluded
x86_64from the production AAB (to silence Play's 16 KB page-size warning), Play started rejecting the next release with:Play's 64-bit rule requires every 32-bit ABI shipped to be paired with its 64-bit equivalent:
armeabi-v7aarm64-v8ax86x86_64Shipping
x86withoutx86_64is what triggered the rejection.Fix
Drop
x86too, making production ARM-only (armeabi-v7a+arm64-v8a). This satisfies both:armeabi-v7ais paired witharm64-v8a; no unpaired 32-bit ABI remains.x86_64means nox86_64 libconceal.so/libsecp256k1.sowarnings.android/app/build.gradle's existingabiFilters(*reactNativeArchitectures())plumbing automatically picks up the new list, so this is a one-file change.User impact
Essentially zero. Real Android phones haven't shipped on x86 since ~2016 (the Asus Zenfone 2 era). Any modern Chromebook or emulator that could run x86 is also
arm64-v8aorx86_64-capable, and Play picks one of those instead.android/gradle.properties.github.dual-versions(used for BrowserStack real-device runs) has been onarmeabi-v7a,arm64-v8aall along, so this just brings the main release config in line with the proven-real-devices target set.What's NOT changing
android/gradle.properties(default, local dev) — still ships all four ABIs for emulator support.android/gradle.properties.github(CI E2E) — still usesx86_64.android/gradle.properties.github.dual-versions— alreadyarmeabi-v7a,arm64-v8a.Changelog
CHANGELOG entry: null
Related issues
Fixes: Google Play "This release is not compliant with the Google Play 64-bit requirement" rejection introduced by #30590.
Follow-up trackers for fixing the underlying 16 KB alignment so we can re-add x86_64 / x86 if ever needed:
react-native-fast-cryptowithreact-native-quick-cryptoscryptreact-native-keychainManual testing steps
Screenshots/Recordings
Before
Play Console:
After
64-bit compliance check passes; 16 KB warning for
x86_64.so files remains cleared.Pre-merge author checklist
unzip -lcheck on the produced AAB and the Play Console upload)team-mobile-platformPerformance checks (if applicable)
gradle.properties.github.dual-versionshas been onarmeabi-v7a,arm64-v8afor BrowserStack real-device runs without issue.Pre-merge reviewer checklist
Made with Cursor
Note
Low Risk
Single release Gradle property change; default and CI gradle files still ship x86/x86_64 for dev and emulators.
Overview
Production release builds now package only
armeabi-v7aandarm64-v8anative ABIs by updatingreactNativeArchitecturesinandroid/gradle.properties.release(removingx86).That pairs with the earlier removal of
x86_64so Play’s 64-bit rule is satisfied—x86withoutx86_64was causing rejection—while keeping the 16 KB page-size workaround (no bundledx86_64.sofrom keychain/crypto AARs). Comments in the same file document why both Intel ABIs are omitted;ndk.abiFiltersinapp/build.gradlealready reads this property, so no Gradle code changes.Local dev (
gradle.properties) and CI E2E (gradle.properties.github) are unchanged.Reviewed by Cursor Bugbot for commit 626b4e5. Bugbot is set up for automated code reviews on this repo. Configure here.