mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 16:06:32 +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.
77 lines
3.3 KiB
Properties
77 lines
3.3 KiB
Properties
# Project-wide Gradle settings.
|
|
|
|
# IDE (e.g. Android Studio) users:
|
|
# Gradle settings configured through the IDE *will override*
|
|
# any settings specified in this file.
|
|
|
|
# For more details on how to configure your build environment visit
|
|
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
|
|
|
# Specifies the JVM arguments used for the daemon process.
|
|
# The setting is particularly useful for tweaking memory settings.
|
|
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
|
|
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
|
|
|
|
# When configured, Gradle will run in incubating parallel mode.
|
|
# This option should only be used with decoupled projects. More details, visit
|
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
|
org.gradle.parallel=true
|
|
|
|
# AndroidX package structure to make it clearer which packages are bundled with the
|
|
# Android operating system, and which are packaged with your app's APK
|
|
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
|
android.useAndroidX=true
|
|
|
|
# Enable AAPT2 PNG crunching
|
|
android.enablePngCrunchInReleaseBuilds=true
|
|
|
|
# Shrink release builds with R8 (code) and the resource shrinker. Keep rules
|
|
# for classes reached by reflection go in app/proguard-rules.pro.
|
|
android.enableMinifyInReleaseBuilds=true
|
|
android.enableShrinkResourcesInReleaseBuilds=true
|
|
|
|
# Use this property to specify which architecture you want to build.
|
|
# You can also override it from the CLI using
|
|
# ./gradlew <task> -PreactNativeArchitectures=x86_64
|
|
reactNativeArchitectures=arm64-v8a
|
|
|
|
# Use this property to enable support to the new architecture.
|
|
# This will allow you to use TurboModules and the Fabric render in
|
|
# your application. You should enable this flag either if you want
|
|
# to write custom TurboModules/Fabric components OR use libraries that
|
|
# are providing them.
|
|
newArchEnabled=true
|
|
|
|
# Use this property to enable or disable the Hermes JS engine.
|
|
# If set to false, you will be using JSC instead.
|
|
hermesEnabled=true
|
|
|
|
# Use this property to enable edge-to-edge display support.
|
|
# This allows your app to draw behind system bars for an immersive UI.
|
|
# Note: Only works with ReactActivity and should not be used with custom Activity.
|
|
edgeToEdgeEnabled=true
|
|
|
|
# Enable GIF support in React Native images (~200 B increase)
|
|
expo.gif.enabled=true
|
|
# Enable webp support in React Native images (~85 KB increase)
|
|
expo.webp.enabled=true
|
|
# Enable animated webp support (~3.4 MB increase)
|
|
# Disabled by default because iOS doesn't support animated webp
|
|
expo.webp.animated=false
|
|
|
|
# Enable network inspector
|
|
EX_DEV_CLIENT_NETWORK_INSPECTOR=true
|
|
|
|
# Use legacy packaging to compress native libraries in the resulting APK.
|
|
expo.useLegacyPackaging=false
|
|
|
|
# Specifies whether the app is configured to use edge-to-edge via the app config or plugin
|
|
# WARNING: This property has been deprecated and will be removed in Expo SDK 55. Use `edgeToEdgeEnabled` or `react.edgeToEdgeEnabled` to determine whether the project is using edge-to-edge.
|
|
expo.edgeToEdgeEnabled=true
|
|
|
|
# AsyncStorage caps its SQLite database at 6 MB unless this is set. The
|
|
# offline mail cache keeps message bodies there and can be set to 500 MB,
|
|
# and once the database is full every write fails, the account registry
|
|
# and the outbox included. This is a ceiling, not an allocation.
|
|
AsyncStorage_db_size_in_MB=1024
|