Holistic improvements
The Android Gradle Plugin (AGP) is used to build Android apps. Many performance enhancing tools depend on new versions of the AGP. To access the most recent improvements, apps should use the latest version of AGP.
Evaluation Recommendation
AGP 7.2 and below (0 points)
Many performance tools not available or outdated.

Versions of AGP up to 7.2 have no support for Baseline Profiles and no support for Startup Profiles. Minification and optimization tooling is also outdated and does not provide more recent performance improvements. This is a huge missed opportunity in terms of performance impact for app startup and runtime performance.

Urgently upgrade to a newer version of AGP for improved performance tooling support.

By upgrading to a newer version of AGP, you will get access to the latest performance tooling. This will allow you to improve your app's performance and user satisfaction.
Check out the AGP upgrade assistant guidance to learn about upgrading to a newer version of AGP.

AGP 7.3 (1 points)
Very limited support for high impact performance tooling.

The Android Gradle Plugin (AGP) 7.3 provides basic support for Baseline Profiles. While Baseline Profiles work this app won't be able to make the most of it. Also Startup Profiles are not supported at this version. Minification and optimization tooling is also outdated and does not provide recent performance improvements. This is a missed performance opportunity for app startup and runtime.

Upgrade to a newer version of AGP for improved performance tooling support.

The major version bump from 7 to 8 can be daunting but is worth the investment from a performance perspective. By upgrading to a newer version of AGP, you will get access to the latest performance tooling. With this you can expect significant startup and runtime perfomrance improvements. This will allow you to improve your app's performance and user satisfaction.
Check out the AGP upgrade assistant guidance to learn about upgrading to a newer version of AGP.

AGP 7.4 - 8.1 (5 points)
Limited support for high impact performance tooling.

The Android Gradle Plugin (AGP) versions 7.4 to 8.1 have support for Baseline Profiles. From AGP 8.0 onwards Baseline Profiles can be used with a dedicated Gradle plugin. Startup Profiles are not supported until AGP 8.2. Minification and optimization tooling is also outdated and does not provide more recent performance improvements.

Upgrade to a newer version of AGP at your earliest convenience.

The major version bump from 7 to 8 can be daunting but is worth the investment from a performance perspective. By upgrading to a newer version of AGP, you will get access to the latest performance tooling. This will allow you to improve your app's startup and runtime performance alongside user satisfaction.
Check out the AGP upgrade assistant guidance to learn about upgrading to a newer version of AGP.

AGP 8.2 - 8.5 (15 points)
Most high impact performance tooling unlocked.

Baseline Profiles and Startup Profiles are fully available when using version 8.2 or higher of the Android Gradle Plugin. You can also use the Baseline Profiles Gradle Plugin. Under the hood improvements through R8 optimizations are also recent and provide high impact. Upgrade to a more recent version of AGP to see improved startup and runtime performance as it also brings in a newer version of R8.

Keep up to date with AGP releases.

Newer versions of AGP will keep the app up to date with the latest performance tooling. This will allow you to improve your app's performance and user satisfaction. App startup and runtime performance can be improved through under the hood improvements of R8, Baseline Profiles and Dex Layout Optimizations.

AGP 8.6+ (20 points)
Fully unlocked high impact performance tooling support

By being on the latest version of AGP, this app is able to fully utilize the latest performance tooling. Under the hood improvements through R8, Baseline Profiles and Dex Layout Optimizations are fully supported. Ensure to use these tools to improve your app's performance and user satisfaction.

Keep up the good work.

Stay up to date with the latest AGP releases to ensure that the app is always using the latest performance tooling. Make sure your Startup Profile is correctly configured and your R8 configuration is working as intended. Check out the overall performance guidance to see how your app runtime performance can be improved.

Holistic improvements
The R8 compiler offers performance improvements across many areas. App size, startup time, runtime rendering, memory usage, crashes, ANR and more are improved by applying minification and optimization techniques. To make the most of these improvements, apps should use R8 in full mode to minify and optimize their code.
Evaluation Recommendation
Not enabled (0 points)
This app is missing out on a lot of performance improvements.

Not using code shrinking and optimization via R8 is a huge missed opportunity to improve app performance. Many under the hood improvements are only available when R8 is enabled.

Urgently enable R8 to unlock major performance improvements.

Enable R8 optimizations as soon as possible. This will unlock a lot of performance improvements. Then come back to take another assessment for more guidance.

Compatibility mode or major exceptions (-dontoptimize, -dontshrink) (5 points)
Disabling optimizations is a huge missed opportunity to improve app performance.

This app's runtime performance is not fully optimized. This is a huge missed opportunity to improve app performance.

Unlock performance potential by enabling R8 optimizations.

Enable R8 optimizations as soon as possible and remove any -dontoptimize and -dontshrink exceptions. This will also unlock the ability to enable other optimizations, like Dex Layout Optimizations. After R8 is enabled in full mode, come back to take another assessment for more guidance.

R8 full mode, minified, optimized and resource shrinking (20 points)
High performance potential unlocked.

By enabling R8 optimizations, your app is in a great spot for performance improvements that are provided through optimization, obfuscation and code shrinking. This app is ready to realize more startup performance improvements by relying on Dex Layout Optimizations.

Ensure that keep rules are up to date.

As the app continues to evolve, R8 keep rules need to be updated to ensure that the app is still fully optimized. Focus performance improvement efforts on other areas. Have you looked at Startup Profiles and Dex Layout Optimizations?

Startup performance

Baseline Profiles improve code execution speed from the first launch providing performance enhancements for every new app install and every app update. This profile-guided optimization (PGO) lets apps optimize startup, reduce rendering issues, and improve overall runtime performance from the first launch for end users. Is a Baseline Profile created and used for app startup?

Evaluation Recommendation
None / Unknown (0 points)
Not having a baseline profile is a huge missed opportunity.

Baseline Profiles can improve first launch code execution speed by around 30% by avoiding interpretation and just-in-time (JIT) compilation steps for included code paths. Check if your app has a baseline profile and make sure to adopt the technology if it doesn't.

Urgently adopt Baseline Profiles.

Baseline Profiles improve first launch code execution speed by about 30% by avoiding interpretation and just-in-time (JIT) compilation steps for included code paths. Check out the guidance on how to adopt them and retake the assessment for an updated score.

Manually, once or infrequently (2 points)
Automation is key to keeping baseline profiles up to date.

Updating baseline profiles manually can easily slip between the cracks. Especially if it's only done on a one-off basis. Baseline Profiles should be freshly generated for each relase to maximize performance gain potential for app startup and runtime performance.

Invest in automating Baseline Profile creation.

The Baseline Profile Gradle plugin is the recommended way to automate Baseline Profile creation. It can be configured to generate a fresh profile for specific build types such as variants or release builds automatically. Profile generation must be automated to take advantage of Dex Layout Optimization.

Manually for each release (5 points)
Automation is key to keeping baseline profiles up to date.

Updating baseline profiles manually can easily slip between the cracks. And a stale baseline profile does not help to improve app startup or runtime performance.

Invest in automating Baseline Profile creation.

The Baseline Profile Gradle plugin is the recommended way to automate Baseline Profile creation. It can be configured to generate a fresh profile for specific build types such as variants or release builds automatically.

Automated for each release (15 points)
Automation makes it easy to keep baseline profiles up to date.

A baseline profile that is kept up to date is a great way to improve app startup and runtime performance. Doing this for each release automatically is a nearly perfect way to ensure high quality baseline profiles.

Keep baseline profile coverage high. Consider nightly profile generation.

Baseline Profiles are only useful if they are kept up to date. Consider generating them nightly to catch issues early and ensure that profile generation works well when a release is needed. Check out the Baseline Profile Gradle plugin for how to further automate Baseline Profile creation.

Automated for nightly builds and releases (20 points)
This is the best way to keep baseline profiles up to date.

A Baseline Profile that's generated nightly and for each release is kept up to date and is ready to be used to improve app startup and runtime performance whenever a release is cut. This preparedness gives your app an edge on app performance. Well done!

Continue improving Baseline Profile coverage.

You have mastered automating Baseline Profile generation for this app. Keep up the good work. Ensure that the user journeys covered by the Baseline Profile are also updated regularly and expanded as the app continues to grow. This will ensure that the Baseline Profile is always up to date and ready to be used to improve app startup and runtime performance.

Startup performance

Baseline Profiles remove the need to run JIT compilation while a feature is used. This improves runtime rendering performance. Adding Baseline Profiles for critical user journeys can improve the overall app performance.

How many user journeys are covered by Baseline Profiles?
Evaluation Recommendation
None / Unknown (0 points)
Missing out on runtime performance improvements.

App runtime performance can be improved by adopting Baseline Profiles for critical user journeys. By only adopting Baseline Profiles for app startup, you are missing out on a great opportunity to improve runtime performance and user satisfaction.

Urgently add Baseline Profiles to improve runtime performance.

Adopt Baseline Profiles for app startup and critical user journeys. These are journeys that are used by a large number of users and are critical to the app's functionality. Come back and retake the assessment for an updated score and more guidance.

App startup +1 user journey (5 points)
Missing out on runtime performance improvements.

App runtime performance can be improved by adopting Baseline Profiles for critical user journeys. By only adopting Baseline Profiles for app startup or a single user journey, you are missing out on a great opportunity to improve runtime performance and user satisfaction.

Adopt Baseline Profiles for more user journeys.

Adopt Baseline Profiles for more user journeys. By doing this the app will be continue to improve runtime performance and user satisfaction. Come back and retake the assessment for an updated score and more guidance.

App startup +2 user journeys (10 points)
Baseline Profiles offer more performance improvements.

By adopting Baseline Profiles for more user journeys, this app has potential to improve runtime performance and user satisfaction.App runtime performance can be improved by adopting Baseline Profiles for critical user journeys.
By only adopting Baseline Profiles for app startup or a few user journeys, you are missing out on a great opportunity to improve runtime performance and user satisfaction.

Continue adopting Baseline Profiles for more user journeys.

Identify more user journeys that are critical to the app's functionality and adopt Baseline Profiles for these. By doing this the app will be continue to improve runtime performance and user satisfaction. Come back and retake the assessment for an updated score and more guidance.

App startup +3 user journeys (15 points)
Outstanding Baseline Profile coverage.

Covering app startup and several critical user journeys with Baseline Profiles is a great way to improve performance and user satisfaction. There might be more user journeys that can be covered by Baseline Profiles. But this app is already in a great shape in terms of Baseline Profile coverage. Keep up the good work.

Expand Baseline Profile coverage to unlock full performance potential.

Continue driving Baseline Profile adoption. Consider improving R8 adoption to improve code size and overall app runtime performance. Also consider adopting Dex Layout Optimizations to further improve app startup performance.

Startup performance

Startup Profiles are used by the build system to further optimize the classes and methods they contain by improving the layout of code in your APK's DEX files. With Startup Profiles, your app startup is usually between 15% and 30% faster than with Baseline Profiles alone.

Does the app use Startup Profiles to optimize the dex layout?
Evaluation Recommendation
Unused / Unknown (0 points)
Huge missed opportunity to improve app startup performance.

Startup Profiles are used by the build system to further optimize the classes and methods they contain by improving the layout of code in your APK's DEX files. With Startup Profiles, your app startup is usually between 15% and 30% faster than with Baseline Profiles alone.
Startup Profiles are used to improve app startup performance. By not adopting Dex Layout Optimizations via Startup Profiles, this app is missing out on a great opportunity to improve app startup performance and user satisfaction.

Urgently invest in adopting Startup Profiles.

Adopt Dex Layout Optimizations via Startup Profiles. This will improve app startup performance and user satisfaction. Using Dex Layout Optimziations requires the use of AGP 8.2 or newer, and enabling minification/R8.

Main entry point (10 points)
Optimized startup performance for the main entry point.

Using Startup Profiles for the main entry point is a great way to improve app startup performance. The improved app performance is positively impacting user experience. Keep up the good work.

Consider covering more entry points.

The main app entry point is the most important one to cover for a Startup Profile. If this app has more entry points, consider covering them with Startup Profiles as well. This could be notifications or supplementary launcher icons.

Most entry points (15 points)
Covering the most used entry points is a great way to improve app startup performance.

Optimized startup experience is great for user satisfaction. By adopting Startup Profiles for most entry points, this app is in a great shape in terms of startup performance from a tooling perspective. Keep up the good work.

Investigate other performance improvements and keep regressions at bay.

Ensure that the Startup Profile is generated automatically for each release build by automating the Dex Layout Optimizations task with the Baseline Profiles Gradle plugin.
Continue monitoring app startup performance with the macrobenchmarks

Compose adoption
More recent versions of Jetpack Compose offer performance improvements over previous versions. To get access to these improvements, apps should use the latest version of Compose. Does the app use the latest stable version of Jetpack Compose?
Evaluation Recommendation
Not using Compose (5 points)
Start using Compose

Jetpack Compose is Android's recommended modern toolkit for building native UI. It simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs.

Start migrating your UI to Jetpack Compose

Jetpack Compose allows interoperability with existing Views system. There are several strategies how to migrate parts of your UI to Compose and benefit from the perks Compose provides. Check our documentation on the migration strategies, or alternatively check our codelab for a more hands-on project.

Compose 2022.10.00 - 2023.10.01 (1 points)
Missing many new features and performance improvements!

By staying on an old version of Jetpack Compose, you're missing all the new features and improvements. Jetpack Compose was designed to be unbundled from the Android system to give developers the ability to decide when to upgrade.

Upgrade to a newer version as soon as possible

Performance continutes to be our top priority and by upgrading you can see major performance improvements across the board. We are seeing ~20% improvement in scroll performance, 12% improvement to startup time, 22% performance improvement to text composables. More information on what improvements were added to the Jetpack Compose 2024.01.00 you can check in the release blog post.

Compose 2024.01.00 - 2024.08.00 (2 points)
Latest Jetpack Compose offers better performance and new features

By not adopting the latest Jetpack Compose versions, you're not getting all the bug fixes, performance improvements and new features that we're working on to help building your beautiful UIs.

Upgrade to the newest version for additional performance improvements

By upgrading to the latest Compose version, we saw additional 17% performance improvement for time to first pixel in our benchmarks! In this version we also enabled by default the new strong skipping mode, which allows radically reducing unnecessary compositions. In addition to that, we improved indication API to allow lazy creation of ripples, optimized the internal Compose representation to a more efficient data structure and started generating more efficient code.

You can check more information on what was released in the Compose 2024.09.00 blog post.

Latest stable Compose (5 points)
Congratulations! This app is up to date with the latest stable Compose release.

Using the latest version of Compose is a great way to benefit from the performance improvements in each new version of Compose.

Keep up the good work

Stay up to date with the latest stable Compose releases to continue benefitting from performance improvements and bug fixes. There is no immediate action to take in this area.

Monitoring and optimization
Calling reportFullyDrawn() by using the FullyDrawnReporter or ReportDrawn() lets the system know when the app is ready to be interacted with by a user. This enables access to the TTFD metric. This metric can be used for benchmarking and enables improved Startup Profile creation.
Evaluation Recommendation
Not using reportFullyDrawn() / FullyDrawnReporter (0 points)
Missing out on under the hood improvements and performance metrics.

Not reporting when the app is ready to be used is a missed opportunity to understand app startup time in more detail. Using this API allows the Android system to provide more detailed performance metrics and enables monitoring of Time to Fully Drawn.
If your app is performing lazy loading and the initial display doesn't include all resources, such as when your app is fetching images from the network, you might want to delay calling reportFullyDrawn() until after your app becomes usable so that you can include the list population as part of your benchmark timing. It's also important for the Android framework to know where a startup profile should stop being measured.

Adopt reportFullyDrawn() / FullyDrawnReporter to unlock more detailed performance metrics.

Use the FullyDrawnReporter API to report when the app is ready to be used. This will unlock more detailed performance metrics and enable monitoring of Time to Fully Drawn.

Using reportFullyDrawn() / FullyDrawnReporter (5 points)
Unlocked more detailed app startup performance metrics.

This app is using the FullyDrawnReporter API to report when the app is ready to be used. This unlocks more detailed performance metrics and enables monitoring of Time to Fully Drawn.

Use information from TTFD to understand and improve app startup performance.

The Android Framework as well as the Google Play Console provide detailed performance metrics for Time to Fully Drawn. Use these metrics to understand and improve your app's startup performance.
When using the macrobenchmarks you can also inspect traces to see what exactly is happening during app startup.

Static App Performance Score

(0/7 questions answered)