Member-only story
Android Modularization Part 12: Release Engineering
R8 full mode, consumer keep rules, and the configuration-cache failure that only appears in release.
Android Modularization & Build Engineering Series — Part 12 of 12
Everything in this series has been about the build you run a hundred times a day. This final part is about the build you run once per release — the one where the mistakes are expensive, the feedback loop is measured in days, and the failure modes are ones you’ve never seen because they only exist in the release variant.
Release builds are where modular projects break in ways debug builds never reveal. R8 runs across the whole app for the first time, and a keep rule missing from one module’s consumer-rules.pro strips a class that only that module's reflection path needs. Obfuscation tooling runs on the full merged output and can fail in ways that don't reproduce on any individual module. And the configuration cache — which has been working perfectly for months — throws a deserialization error in the release variant only, because a plugin that only applies to release builds captured something unserializable.
This article covers all of it, and then closes the series with an audit that pulls together every checkpoint from Parts 1 through 11.










