Skip to content

Assets & size

Checks on bundled assets that drive the size axis — oversized images/fonts/media, duplicates, heavy SVG/Lottie, and image-format opportunities.

12 checks.

assets-duplicate-files

Severity: Varies with what is found

Duplicate assets bloat the app bundle and make maintenance harder — changes must be applied in multiple places.

How to fix: Consolidate duplicate files into a single shared location and reference them from one place.


assets-excessive-decoded-image

Severity: High

Decoded bitmap memory is width x height x 4 bytes and has nothing to do with how well the file compresses — a 300 KB PNG can occupy 90 MB once decoded. That allocation is what pushes a mid-range device into an OutOfMemoryError or a long GC pause, and no size-based check sees it coming. Past roughly 8192 pixels on a side the image also exceeds the maximum texture dimension of many shipped GPUs, so it fails to render at all rather than rendering slowly.

How to fix: Resize the source asset to the largest size it is actually displayed at (including the highest density bucket) rather than shipping the camera or export resolution. Where the full resolution is genuinely needed, decode it downsampled — BitmapFactory.Options.inSampleSize on Android, ResizeImage/cacheWidth in Flutter, a thumbnail request in iOS — and tile anything that must exceed the maximum texture size.


assets-heavy-font-family

Severity: Medium

Each font variant adds to the bundle size. Most apps only need 3-4 variants (regular, bold, italic, bold-italic).

How to fix: Audit which font weights and styles are actually used in the app and remove unused variants. Consider using a variable font instead.


assets-large-lottie

Severity: Varies with what is found

Large Lottie animations consume memory during playback and increase bundle size. They may contain embedded images or overly complex paths.

How to fix: Simplify the animation in After Effects/Figma, remove embedded raster images, reduce keyframes, or use dotLottie compression.


assets-large-svg

Severity: Varies with what is found

Large SVGs can slow down rendering and increase bundle size. They may contain unnecessary metadata or unoptimized paths.

How to fix: Optimize the SVG using tools like SVGO, remove unnecessary metadata, or consider converting to a vector drawable / programmatic drawing.


assets-oversized-font

Severity: High–Medium–Low

A full font file ships every glyph even though apps use a small subset, wasting bundle size.

How to fix: Subset the font to the glyphs/weights you actually use, or rely on platform fonts.


assets-oversized-image

Severity: High–Medium–Low

Large raster images inflate the download size and memory use, hurting install conversion and low-end devices.

How to fix: Compress and right-size images, prefer WebP, or load large art from the network/CDN instead of bundling it.


assets-oversized-video-audio

Severity: High–Medium–Low

Bundling large video/audio bloats the app download for content that is usually better streamed.

How to fix: Stream media from a CDN at runtime instead of bundling it in the app.


assets-rasterized-vector

Severity: Medium

A vector with an embedded raster image negates the size advantage of using a vector format and adds rendering overhead (the raster must be decoded and scaled at runtime, consuming extra CPU and memory).

How to fix: Re-export the vector/Lottie without embedded raster layers. If a raster image is genuinely needed, reference an optimized WebP/PNG separately, or use the dotLottie (.lottie) container.


assets-top-size-contributors

Severity: Info

Understanding which files contribute most to repository size helps prioritize optimization efforts for maximum impact.

How to fix: Review each large file to determine if it can be compressed, optimized, moved to a CDN, or removed if unused.


assets-unoptimized-png

Severity: Low

Unoptimized PNG files increase app download size and install footprint. Lossless PNG compression can typically reduce file sizes by 20-70% with no visual quality loss.

How to fix: Run PNG files through a lossless optimizer such as oxipng or pngcrush. Add optimization to your CI pipeline with tools like image-min or squoosh-cli.


assets-webp-candidate

Severity: Low

WebP format provides superior compression over JPEG and PNG for both lossy and lossless images, reducing app download size and memory usage.

How to fix: Convert JPEG/PNG assets to WebP using cwebp or Android Studio's built-in converter. Both Android (API 14+) and iOS (14+) support WebP natively. Images inside an Xcode asset catalog and Android launcher icons are excluded from this count — WebP is not a legal input there.