mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 00:06:17 +00:00
Release builds had R8 and resource shrinking off, so every class of every dependency went into the APK unminified: the published 0.1.62 is 42.8 MB for arm64, 25.85 MB of it dex (PF9 in the audit). Turn both on through the properties build.gradle already reads (`android.enableMinifyInReleaseBuilds` and `android.enableShrinkResourcesInReleaseBuilds`). The consumer rules of React Native, Expo, Firebase, ML Kit and the other libraries cover what they load by reflection. The app's own package is kept whole, which costs a few KB and keeps its frames readable in an obfuscated stack trace. Measured on a local x86_64 release build: - APK: 44.7 MB -> 38.0 MB (download size 23.8 MB -> 17.2 MB) - dex: 30.4 MB in 4 files -> 11.3 MB in 2 files - classes: 27,631 -> 16,724 With `-dontobfuscate` the APK would be 38.8 MB (13.5 MB of dex), so obfuscation stays on. Library frames in a release stack trace are now obfuscated; retrace them with that build's `android/app/build/outputs/mapping/release/mapping.txt`. Checked on the emulator: cold start in light and dark mode, German and Russian strings, SENDTO and VIEW mailto and SEND share intents, every sign-in screen, the QR scanner with ML Kit, and an FCM data message starting the headless push task.
24 lines
1.1 KiB
Prolog
24 lines
1.1 KiB
Prolog
# Add project specific ProGuard rules here.
|
|
# By default, the flags in this file are appended to flags specified
|
|
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
|
|
# You can edit the include path and order by changing the proguardFiles
|
|
# directive in build.gradle.
|
|
#
|
|
# For more details, see
|
|
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
|
|
# react-native-reanimated
|
|
-keep class com.swmansion.reanimated.** { *; }
|
|
-keep class com.facebook.react.turbomodule.** { *; }
|
|
|
|
# Add any project specific keep options here:
|
|
|
|
# The app's own native code (com.anonymous.bulwarkmobile). What R8 must not
|
|
# drop or rename there is already covered elsewhere: React Native's rules keep
|
|
# every NativeModule, whose @ReactMethod methods JS calls by name, and AAPT
|
|
# keeps the application, activity and services listed in AndroidManifest.xml
|
|
# (FCM, UnifiedPush and the headless JS task). Keeping the package whole on
|
|
# top of that costs a few KB and leaves its class and method names readable
|
|
# in a crash report from an obfuscated release build.
|
|
-keep class com.anonymous.bulwarkmobile.** { *; }
|