-
-
Couldn't load subscription status.
- Fork 1.6k
(WIP) Mtopo27/size analysis docs #15256
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
defc5a6
0a0fbaa
a3fc8eb
6c472be
e136a63
935e91d
84c69b6
4bb7e6f
87195c4
896c120
abde456
633261f
b74e732
97371a3
a447287
269f074
589f484
f5591b1
a7827d7
5694751
07faf8d
9d4d068
b5759eb
a0d62d7
8ca5b1b
64a1819
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,42 @@ | ||||||
| --- | ||||||
| title: Size Analysis | ||||||
| sidebar_title: Size Analysis | ||||||
| sidebar_order: 5200 | ||||||
| description: Upload Android builds to Sentry for Size Analysis. | ||||||
| --- | ||||||
|
|
||||||
| <Include name="size-analysis/ea" /> | ||||||
|
|
||||||
| [Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in pre-production to prevent unexpected size increases (regressions) from reaching users. Aside from being courteous to your users, a smaller app size helps boost installation and retention rates, especially for customers with limited storage or slower connections. | ||||||
|
|
||||||
| ## Getting Started | ||||||
|
|
||||||
| **Accepted Formats**: AAB (preferred) | IPA | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||||||
|
|
||||||
| **Upload Mechanisms**: [Gradle](#uploading-with-gradle) | [Sentry CLI](#uploading-with-the-sentry-cli) | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| ### Uploading with Gradle | ||||||
|
|
||||||
| <Include name="size-analysis/upload-gradle" /> | ||||||
|
|
||||||
| ### Uploading with the Sentry CLI | ||||||
|
|
||||||
| <Include name="size-analysis/upload-cli-android" /> | ||||||
|
|
||||||
| ## Upload Metadata | ||||||
|
|
||||||
| <Include name="size-analysis/upload-metadata" /> | ||||||
|
|
||||||
| ### Build Configuration | ||||||
|
|
||||||
| <Include name="size-analysis/build-configuration-android" /> | ||||||
|
|
||||||
| ## Best Practices | ||||||
|
|
||||||
| - **Upload release builds only** - Only upload optimized release builds to get accurate size metrics that represent what users download. Debug builds contain extra symbols and debugging information that inflate the size. | ||||||
|
|
||||||
| - **Upload on every commit to main** - Configure your CI pipeline to upload builds for every commit merged to your main branch. This creates a complete historical record of your app's size evolution and helps identify which commits introduced size changes. | ||||||
|
|
||||||
| - **Upload on every PR** - Set up CI to upload builds for every pull request. This enables automatic size comparisons between the PR build and the base branch, allowing you to catch size regressions during code review before merging. | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| <PageGrid /> | ||||||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,111 @@ | ||||||||||
| --- | ||||||||||
| title: Insights | ||||||||||
| sidebar_order: 5250 | ||||||||||
| description: Preview how Size Analysis reports highlight Android build trends. | ||||||||||
| --- | ||||||||||
|
|
||||||||||
| TODO: ADD SOME PICS | ||||||||||
|
|
||||||||||
| Size Analysis Insights point out how opportunities to reduce your Android app's size. They spot patterns like duplicate files, oversized media, or unneeded assets, and list exactly what to fix along with the estimated size savings. | ||||||||||
|
|
||||||||||
| ## Android Insights | ||||||||||
|
|
||||||||||
| Below are a list of available insights for Android builds, followed by more details about each insight: | ||||||||||
|
|
||||||||||
| | Insight | What it flags | | ||||||||||
| | --------------------------------------------------------- | --------------------------------------------------------------------- | | ||||||||||
| | [Duplicate Files](#duplicate-files) | Flags identical payloads so you can drop the duplicates | | ||||||||||
| | [Large Images](#large-images) | Surfaces oversized image assets worth recompressing or resizing. | | ||||||||||
| | [Large Videos](#large-videos) | Highlights video files that are bigger than typical delivery budgets. | | ||||||||||
| | [WebP Optimization](#webp-optimization) | Tests PNG/JPEG bitmaps to see if lossless WebP would shrink them. | | ||||||||||
| | [Large Audio](#large-audio) | Surfaces hefty audio tracks that could be recompressed or trimmed. | | ||||||||||
| | [Hermes Debug Info (RN Only)](#hermes-debug-info-rn-only) | Points to bundled Hermes bytecode still carrying debugger metadata. | | ||||||||||
|
|
||||||||||
| ### Duplicate Files | ||||||||||
|
|
||||||||||
| **What it is**: Finds matching files or directories inside `assets/`, `res/`, or embedded libraries. | ||||||||||
|
|
||||||||||
| **How to fix**: Keep one copy and remove or dedupe the rest. For resource folders, consolidate the asset into a shared module or asset pack so the APK only bundles it once. | ||||||||||
|
|
||||||||||
| ### Large Images | ||||||||||
|
|
||||||||||
| **What it is**: Flags image files larger than 10 MB. | ||||||||||
|
|
||||||||||
| **How to fix**: Compress images with lossless WebP or resize them before bundling. | ||||||||||
|
|
||||||||||
| **Options**: | ||||||||||
|
|
||||||||||
| - Use Android Studio: right-click an image → **Convert to WebP** → choose **Lossless**. | ||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| - Use the command line: | ||||||||||
|
|
||||||||||
| ```bash | ||||||||||
| # Install cwebp | ||||||||||
| brew install webp | ||||||||||
|
|
||||||||||
| # Convert PNG to lossless WebP | ||||||||||
| cwebp -lossless input.png -o output.webp | ||||||||||
|
|
||||||||||
| # Convert JPEG to lossless WebP | ||||||||||
| cwebp -lossless input.jpg -o output.webp | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| Large hero images or splash screens may also load more efficiently if served over the network instead of being bundled with the app. | ||||||||||
|
|
||||||||||
| ### Large Videos | ||||||||||
|
|
||||||||||
| **What it is**: Highlights bundled video assets above 10 MB. | ||||||||||
|
|
||||||||||
| **How to fix**: Re-encode them to H.264 or HEVC with a lower bitrate, shorten the clip, or host the video remotely and stream it on demand. To shrink a clip in place, try FFmpeg: | ||||||||||
|
|
||||||||||
| ```bash | ||||||||||
| ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a copy output.mp4 | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| Lower the `-crf` value for higher quality (and larger files), or raise it for smaller files. | ||||||||||
|
|
||||||||||
| ### WebP Optimization | ||||||||||
|
|
||||||||||
| **What it is**: Tests every PNG, BMP, JPG, or JPEG (excluding `.9.png`) against lossless WebP conversion. If the WebP variant saves at least 500 bytes, the insight lists the asset. | ||||||||||
|
|
||||||||||
| **How to fix**: Convert the listed bitmap to lossless WebP and update its references. Pick one of the paths below. | ||||||||||
|
|
||||||||||
| #### Option 1: Android Studio | ||||||||||
|
|
||||||||||
| 1. In Android Studio, right-click the image. | ||||||||||
| 2. Choose **Convert to WebP…**. | ||||||||||
| 3. Select **Lossless** (API 18+ supports it) and review the preview. | ||||||||||
|
|
||||||||||
| #### Option 2: Command line | ||||||||||
|
|
||||||||||
| ```bash | ||||||||||
| # Install cwebp | ||||||||||
| brew install webp | ||||||||||
|
|
||||||||||
| # Convert PNG to lossless WebP | ||||||||||
| cwebp -lossless input.png -o output.webp | ||||||||||
|
|
||||||||||
| # Convert JPEG to lossless WebP | ||||||||||
| cwebp -lossless input.jpg -o output.webp | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| > Lossless WebP with alpha requires `minSdkVersion` ≥ 18. For older devices, keep PNG fallbacks for assets that rely on transparency. | ||||||||||
|
|
||||||||||
| ### Large Audio | ||||||||||
|
|
||||||||||
| **What it is**: Surfaces audio files larger than 5 MB across `res/raw`, `assets`, or libraries. | ||||||||||
|
|
||||||||||
| **How to fix**: Re-encode them at a lower bitrate or modern format using FFmpeg or your DAW, trim unused segments, or stream long-form media instead of bundling it. A quick FFmpeg recompress: | ||||||||||
|
|
||||||||||
| ```bash | ||||||||||
| ffmpeg -i input.wav -c:a aac -b:a 128k output.m4a | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| Tweak the bitrate to balance quality and size. | ||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This 'Tweak' line feels out of place, is it one of the options to fix this issue, or does it relate to the bash snippet? |
||||||||||
|
|
||||||||||
| TODO: be clearer about this bitrate line | ||||||||||
|
|
||||||||||
| ### Hermes Debug Info (RN Only) | ||||||||||
|
|
||||||||||
| **What it is**: Detects Hermes bytecode bundles that still contain debug info sections. | ||||||||||
|
|
||||||||||
| **How to fix**: Build the React Native bundle in release mode (`react-native bundle --dev false` or the Gradle release task) so Hermes strips debug sections before packaging. | ||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,45 @@ | ||||||||||
| --- | ||||||||||
| title: Size Analysis | ||||||||||
| sidebar_order: 5200 | ||||||||||
| description: Upload iOS builds to Sentry for size analysis. | ||||||||||
| --- | ||||||||||
|
|
||||||||||
| <Include name="size-analysis/ea" /> | ||||||||||
|
|
||||||||||
| [Size Analysis](/product/size-analysis) helps you monitor your mobile app's size in pre-production to prevent unexpected size increases (regressions) from reaching users. Aside from being courteous to your users, a smaller app size helps boost installation and retention rates, especially for customers with limited storage or slower connections. | ||||||||||
|
|
||||||||||
| ## Getting Started | ||||||||||
|
|
||||||||||
| **Accepted Formats**: XCArchive (preferred) | IPA | ||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
|
||||||||||
| **Upload Mechanisms**: [Fastlane Plugin](#uploading-with-fastlane) | [Sentry CLI](#uploading-with-the-sentry-cli) | ||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
|
||||||||||
| ### Uploading with Fastlane | ||||||||||
|
|
||||||||||
| <Include name="size-analysis/upload-fastlane" /> | ||||||||||
|
|
||||||||||
| ### Uploading with the Sentry CLI | ||||||||||
|
|
||||||||||
| <Include name="size-analysis/upload-cli-ios" /> | ||||||||||
|
|
||||||||||
| ## Upload Metadata | ||||||||||
|
|
||||||||||
| <Include name="size-analysis/upload-metadata" /> | ||||||||||
|
|
||||||||||
| ### Build Configuration | ||||||||||
|
|
||||||||||
| <Include name="size-analysis/build-configuration-ios" /> | ||||||||||
|
|
||||||||||
| ## App Thinning | ||||||||||
|
|
||||||||||
| <Include name="size-analysis/app-thinning" /> | ||||||||||
|
|
||||||||||
| ## Best Practices | ||||||||||
|
|
||||||||||
| - **Upload release builds only** - Only upload optimized release builds to get accurate size metrics that represent what users download. Debug builds contain extra symbols and debugging information that inflate the size. | ||||||||||
|
|
||||||||||
| - **Upload on every commit to main** - Configure your CI pipeline to upload builds for every commit merged to your main branch. This creates a complete historical record of your app's size evolution and helps identify which commits introduced size changes. | ||||||||||
|
|
||||||||||
| - **Upload on every PR** - Set up CI to upload builds for every pull request. This enables automatic size comparisons between the PR build and the base branch, allowing you to catch size regressions during code review before merging. | ||||||||||
|
|
||||||||||
| <PageGrid /> | ||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Feels a little weird calling this a "Prerequisite"