Google Play Console Flagged Your Bitmaps — Here Are the Configs That Actually Fix It
A bitmap optimization warning in Google Play Console is a direct signal that the app is wasting memory and install size, which correlates with worse store rankings and higher uninstall rates on low-RAM devices. The fix is not a single config toggle — it spans the image library, the Compose layer, the server API, and every third-party SDK bundled into the APK.
Google Play Console's automated bitmap optimization scan flags APKs that bundle oversized images, skip WebP conversion, omit density-specific drawables, or decode full-resolution bitmaps at runtime without downsampling. The check is not just a lint warning — it directly affects the app's quality metrics and can surface as a formal rectification suggestion in the Play Console dashboard.
Fixing it means configuring Coil or Glide to always decode at display size, setting a default pixel format like RGB_565 for non-transparent images, and avoiding unconstrained layout sizes that force the library to load the original resolution. Server-side cropping via URL parameters and custom Coil interceptors shifts the work off the device entirely. For Compose projects, passing a Painter object instead of a resource ID or URL triggers unnecessary recompositions because the Compose compiler cannot mark Painter as stable.
Even when every in-house bitmap path is correct, a third-party SDK can still trigger the warning. The last mile is checking whether bundled libraries pack their own unoptimized drawables or decode bitmaps without size constraints, and updating them to versions that have already addressed the issue.
The Play Console warning is a packaging-time and runtime hybrid check — it scans both what is inside the APK and how the app decodes those assets at runtime, which means a correctly configured image library can still fail if a single unconstrained layout triggers a full-resolution decode.
The Painter stability trap in Compose is a compiler-level footgun: the Compose compiler refuses to mark Painter as stable because Bitmap equality checks are too expensive, so passing a Painter where a resource ID would suffice causes recomposition storms that have nothing to do with bitmap memory.
The advice to check third-party SDKs is the most overlooked root cause — a single bundled library with a 2MB PNG in its res folder or a manual BitmapFactory.decodeStream call without inSampleSize will trigger the warning regardless of how well the app's own image pipeline is tuned.