Migrated from GitLab issue #51, opened by the openGym maintainer (project bot) on 2026-09-05. openGym moved back to GitHub on 2026-09-11; the GitLab thread is closed and points here.
The Android build grew from 5.1 MB (v1.3.1) to 27.7 MB (v1.3.2 and v1.3.3). unzip -l on openGym-1.3.3.apk:
| file |
size |
classes.dex |
9.5 MB |
lib/x86/libbarhopper_v3.so |
6.1 MB |
lib/x86_64/libbarhopper_v3.so |
5.9 MB |
lib/arm64-v8a/libbarhopper_v3.so |
4.9 MB |
lib/armeabi-v7a/libbarhopper_v3.so |
3.2 MB |
libbarhopper_v3 is Google ML Kit's barcode model, pulled in by @capacitor-mlkit/barcode-scanning for the gym membership QR check-in (a797729, v1.3.2). Nothing is wrong with the feature; the cost is 20 MB of native code for four ABIs plus the ML Kit classes, on a phone that only needs one ABI.
Options, cheapest first:
- ABI splits /
abiFilters in frontend/android/app/build.gradle: ship arm64-v8a (and armeabi-v7a if we still care about 2016 phones); drop x86/x86_64 — no real phone runs them. Saves ~12 MB on its own.
- Unbundled ML Kit variant (
barcode-scanning via Google Play services instead of barcode-scanning-bundled model): the model downloads on first use, the APK loses libbarhopper entirely. Trade-off: first scan needs Play services + network, which breaks on de-Googled phones — so probably not for openGym.
- ProGuard/R8 minify for release:
classes.dex 9.5 MB is unminified. Needs a keep-rule check for Capacitor plugins.
Worth doing before the in-app updater (v1.3.3) makes people download this on every release.
The Android build grew from 5.1 MB (v1.3.1) to 27.7 MB (v1.3.2 and v1.3.3).
unzip -lonopenGym-1.3.3.apk:classes.dexlib/x86/libbarhopper_v3.solib/x86_64/libbarhopper_v3.solib/arm64-v8a/libbarhopper_v3.solib/armeabi-v7a/libbarhopper_v3.solibbarhopper_v3is Google ML Kit's barcode model, pulled in by@capacitor-mlkit/barcode-scanningfor the gym membership QR check-in (a797729, v1.3.2). Nothing is wrong with the feature; the cost is 20 MB of native code for four ABIs plus the ML Kit classes, on a phone that only needs one ABI.Options, cheapest first:
abiFiltersinfrontend/android/app/build.gradle: ship arm64-v8a (and armeabi-v7a if we still care about 2016 phones); drop x86/x86_64 — no real phone runs them. Saves ~12 MB on its own.barcode-scanningvia Google Play services instead ofbarcode-scanning-bundledmodel): the model downloads on first use, the APK loseslibbarhopperentirely. Trade-off: first scan needs Play services + network, which breaks on de-Googled phones — so probably not for openGym.classes.dex9.5 MB is unminified. Needs a keep-rule check for Capacitor plugins.Worth doing before the in-app updater (v1.3.3) makes people download this on every release.