Establish an equivalent release baseline
Follow the React Native release guide and record whether you are measuring a universal APK, an architecture-specific APK or a Play device download.
Do not compare a debug build with a store-generated release and attribute the difference to one optimization.
Inspect the largest contributors
| Contributor | Review action |
|---|---|
| Images/audio | Appropriate dimensions, compression and actual use |
| Native modules | Remove unused dependencies, review ABI support |
| JavaScript/Hermes bundle | Dead code and dependency choices |
| Duplicate resources | Packaging and library overlap |
The Android size guide provides packaging context. Removing an ABI can reduce a universal file while excluding devices; it is not a free optimization.
Treat Hermes as a measured choice
The Hermes guide describes the engine and release bytecode. Do not switch engines solely because a generic benchmark claims a smaller app. Measure your app's size, startup and memory together.
Rebuild from source
Do not delete native libraries from a signed APK and rezip it. Use supported build settings so dependency consistency and signing remain valid.
After removing a module, check initialization, autolinking/code generation and feature fallback paths. An unused-looking native dependency may still support a rarely used screen.
Verify the delivered experience
Test supported architectures and the actual Play-delivered artifact when using bundles. APKLint's APK Size Analyzer and React Native Analyzer can locate package contributors, but they do not guarantee a particular download saving. Report before/after sizes for clearly named equivalent artifacts and retain functional test evidence.
Attribute an increase to the layer that grew
Suppose adding a document-scanning module increases a release APK by several megabytes. Compare packaged native libraries, images and application bundle entries before and after the change. A small JavaScript wrapper can introduce a large native SDK, so counting the wrapper's source lines does not explain its distribution cost. Check the resolved Android dependencies as well as the JavaScript lockfile.
The React Native publishing guide describes Android release packaging. Keep artifact type and architecture targeting constant during comparison. A universal APK and an arm64-only APK serve different device populations; their size difference is not evidence that unused code was successfully removed.
Remove a dependency through the build and validate its boundaries
If the scanning feature is unused, remove its dependency through the supported project configuration and rebuild. Inspect autolinking or code-generation output for stale references, and exercise startup plus any screen that previously imported the module. A dead JavaScript import and a packaged native initialization path can have different retention behavior.
For image-heavy applications, compare image dimensions and formats with actual display requirements. Test transparency, scaling and offline loading after asset changes. Moving a large asset to a remote request changes first-use latency and offline behavior, so include that product tradeoff in the result. Check duplicate assets under different paths before changing quality: two byte-identical illustrations can occupy separate package entries even though only one is needed. Confirm references and rebuild rather than removing an entry from the finished archive.
Inspect engine-related size separately. The Hermes guide describes its integration and compiled bundle path. Measure the application's startup and memory along with package size before making an engine-related change. Keep supported framework and engine versions together rather than substituting a binary based on filename similarity.
Finally, compare the delivered artifact for a representative device and preserve its digest with the report. Test a native feature on every architecture the product still claims to support, and retain source maps and native diagnostics for the candidate. Report the exact byte savings and the output types measured. A smaller archive achieved by dropping a required ABI or breaking a rarely visited screen is a compatibility regression, not a completed size optimization.
Sources and further reading
- React Native: Publishing to Google Play Store
- React Native: Using Hermes
- Android Developers: Reduce your app size
Reference review: 29 September 2026. Examples illustrate the workflow; check your installed versions, release artifact and account-specific Console requirements before applying them. This guide is not a claim that APKLint executed your project or verified your private account.


