build(release): build the release APK for arm64-v8a only #228
Closed
JMR-dev wants to merge 1 commits from
build-release-arm64-only into main
pull from: build-release-arm64-only
merge into: :main
:main
:feat-362-yahoo-imap-limits
:feat-34-debug-ingest
:spike-359-sqlcipher-ondevice
:build-290-jacoco-scope
:fix-172-license-gate-upgrade-users
No Reviewers
Labels
Clear labels
Compliance
Infrastructure
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
Release
broken
bug
dequeued
documentation
donotmerge
duplicate
enhancement
good first issue
help wanted
invalid
question
queued
wontfix
Priority P0 (P0=highest for CI runners, P9=lowest)
Priority P1 (P0=highest for CI runners, P9=lowest)
Priority P2 (P0=highest for CI runners, P9=lowest)
Priority P3 (P0=highest for CI runners, P9=lowest)
Priority P4 (P0=highest for CI runners, P9=lowest)
Priority P5 (P0=highest for CI runners, P9=lowest)
Priority P6 (P0=highest for CI runners, P9=lowest)
Priority P7 (P0=highest for CI runners, P9=lowest)
Priority P8 (P0=highest for CI runners, P9=lowest)
Priority P9 (P0=highest for CI runners, P9=lowest)
Deprioritize below all P-levels; higher-priority PRs may preempt it. Coordinator/owner only.
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Good for newcomers
Extra attention is needed
This doesn't seem right
Further information is requested
This will not be worked on
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JMR-dev/LibreMail#228
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
ndk { abiFilters += "arm64-v8a" }to the release build type only inapp/build.gradle.kts. The release build previously produced a universal APK with all four ABIs (arm64-v8a, armeabi-v7a, x86, x86_64); it now ships arm64-v8a only.defaultConfigand the debug build type are untouched on purpose: CI's E2E matrix (.github/workflows/ci.yml) runsconnectedDebugAndroidTest/ Gradle Managed Devices on x86_64 emulators, which need the x86_64 native libs (incl.libsqlcipher.so). An arm64-only filter on debug/defaultConfig would crash those emulator tests withUnsatisfiedLinkError.Scope / blast radius — please read
.github/workflows/release.yml:237-238builds./gradlew :app:bundleRelease :app:assembleRelease— both use thereleasebuild type, so this filter affects both the Play AAB and the standalone APK. After this change, the AAB uploaded to Google Play and the GitHub-release APK both ship arm64-v8a only, dropping armeabi-v7a (32-bit ARM), x86, and x86_64 device coverage.If arm64-only is only intended for the standalone release APK and the Play AAB should keep serving all four ABIs (so Play's per-device delivery can still reach 32-bit-ARM/x86 devices), this filter should instead be scoped to the
assembleReleasetask specifically (e.g. via avariantFilter/per-tasksplitsconfig, or restrictingndk.abiFiltersthrough a task-specific mechanism) rather than the wholereleasebuild type. As implemented here, per the task spec, both artifacts are arm64-v8a only.Conflicts found in docs — flagging, not resolving
docs/play-compliance.md§2 (16 KB page-size support) was verified against an AAB containing all four ABIs (its table explicitly lists arm64-v8a, x86_64, armeabi-v7a, and x86 alignment results for all three bundled native libs). After this change the AAB only contains arm64-v8a, so that section's premise ("the release AAB packages exactly three native libraries" across 4 ABIs) is now stale and devices needing armeabi-v7a/x86/x86_64 builds from Play would get no installable APK at all (Play cannot serve a device an ABI that isn't in the bundle). This doc should be revisited if arm64-only is intentional for Play.docs/fdroid-compliance.mddoesn't mandate a specific ABI set, butdocs/fdroid/org.libremail.app.ymlbuilds via plaingradle: - yes, which invokes this samereleasebuild type — so F-Droid's published build would also become arm64-v8a only. F-Droid's user base skews toward older/budget hardware, some of which is still 32-bit-ARM (armeabi-v7a) only; this is worth a maintainer call, not an anti-feature/policy blocker (F-Droid has no ABI-universality requirement in its inclusion criteria).Verification
Built with JDK 21 (
C:\Program Files\Eclipse Adoptium\jdk-21.0.11.10-hotspot; AGP 9.2 does not support JDK 25+).1. Release is arm64-only —
./gradlew :app:assembleRelease, then listed.soentries inapp-release.apk:Only
lib/arm64-v8a/— confirmed no armeabi-v7a/x86/x86_64.2. Debug still has all ABIs —
./gradlew :app:assembleDebug, then listed.soentries inapp-debug.apk:x86_64is present — the CI emulator ABI is unaffected.3. Fast gate:
:app:testDebugUnitTest :app:compileDebugAndroidTestKotlin :app:lintDebug :app:ktlintCheck :app:detekt— allBUILD SUCCESSFUL.Test plan
./gradlew :app:assembleRelease— release APK contains onlylib/arm64-v8a/*.so./gradlew :app:assembleDebug— debug APK still containslib/{arm64-v8a,armeabi-v7a,x86,x86_64}/*.so./gradlew :app:testDebugUnitTest :app:compileDebugAndroidTestKotlin :app:lintDebug :app:ktlintCheck :app:detekt🤖 Generated with Claude Code
Superseded by #230, which keeps 32-bit ARM (armeabi-v7a) alongside arm64-v8a per maintainer request (release is now ARM-only: arm64-v8a + armeabi-v7a, x86/x86_64 intentionally dropped). Closing this arm64-v8a-only PR in favor of #230.
Pull request closed