


  
    
    
    
    
    
    
    
    
      <link rel="stylesheet"/>
      <link rel="stylesheet"/>
      <link rel="stylesheet"/>
      
        <link rel="stylesheet" disabled=""/>
      
    
    
    
  
  
  
    
        

<link rel="stylesheet"/>
<div class="android-app-performance">
  <aside class="key-point">
    <b>Instructions for static app performance score </b>
    <ul>
        <li>
            For each item in this assessment, select the option that best matches the current state of the app.
        </li>
        <li>
            Check the app&#39;s source code and match the requested criteria to the best of your knowledge.
        </li>
        <li>
            If you&#39;re unsure about an answer, choose the worst case option.
        </li>
  </ul>
  </aside>
  <section class="devsite-landing-row devsite-landing-row-1-up devsite-landing-row-100 devsite-landing-row-no-image-background devsite-landing-row-padding-medium android-promo">
    <div class="devsite-landing-row-group">
      <div class="devsite-landing-row-item">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-body">
            <div class="devsite-landing-row-item-labels">
              <span class="">Holistic improvements</span>
            </div>
            <h3 class="hide-from-toc no-link">
              Assess Android Gradle Plugin version adoption
            </h3>
            <div class="devsite-landing-row-item-description-content">
              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.
            </div>
            <div class="devsite-landing-row-item-buttons">
              
                

<div>
  <devsite-select id="agp-version">
      <select id="agp-version-select">
          <option selected="">Make an assessment</option>
          
            <option id="0">AGP 7.2 and below (0 points)</option>
          
            <option id="1">AGP 7.3 (1 points)</option>
          
            <option id="5">AGP 7.4 - 8.1 (5 points)</option>
          
            <option id="15">AGP 8.2 - 8.5 (15 points)</option>
          
            <option id="20">AGP 8.6+ (20 points)</option>
          
      </select>
  </devsite-select>
  <devsite-filter>
      <table class="assessment-table">
          <thead>
              <tr>
                  <th>Evaluation</th>
                  <th>Recommendation</th>
              </tr>
          </thead>
          <tbody class="list">
              
              <tr>
                  <td class="hide">
                      <div>AGP 7.2 and below (0 points)</div>
                  </td>
                  <td>
                      <b>Many performance tools not available or outdated.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Urgently upgrade to a newer version of AGP for improved performance tooling support.</b>
                      <p>
                      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&#39;s performance and user satisfaction.<br/>Check out the <a href="http://developer.android.com/build/agp-upgrade-assistant">AGP upgrade assistant</a> guidance to learn about upgrading to a newer version of AGP.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>AGP 7.3 (1 points)</div>
                  </td>
                  <td>
                      <b>Very limited support for high impact performance tooling.</b>
                      <p>
                      The Android Gradle Plugin (AGP) 7.3 provides basic support for Baseline Profiles. While Baseline Profiles work this app won&#39;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.
                  </p></td>
                  <td>
                      <b>Upgrade to a newer version of AGP for improved performance tooling support.</b>
                      <p>
                      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&#39;s performance and user satisfaction.<br/>Check out the <a href="http://developer.android.com/build/agp-upgrade-assistant">AGP upgrade assistant</a> guidance to learn about upgrading to a newer version of AGP.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>AGP 7.4 - 8.1 (5 points)</div>
                  </td>
                  <td>
                      <b>Limited support for high impact performance tooling.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Upgrade to a newer version of AGP at your earliest convenience.</b>
                      <p>
                      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&#39;s startup and runtime performance alongside user satisfaction.<br/>Check out the <a href="http://developer.android.com/build/agp-upgrade-assistant">AGP upgrade assistant</a> guidance to learn about upgrading to a newer version of AGP.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>AGP 8.2 - 8.5 (15 points)</div>
                  </td>
                  <td>
                      <b>Most high impact performance tooling unlocked.</b>
                      <p>
                      Baseline Profiles and Startup Profiles are fully available when using <a href="http://developer.android.com/topic/performance/baselineprofiles/overview#recommended-versions">version 8.2 or higher</a> of the Android Gradle Plugin. You can also use the <a href="http://developer.android.com/topic/performance/baselineprofiles/configure-baselineprofiles">Baseline Profiles Gradle Plugin</a>. 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.
                  </p></td>
                  <td>
                      <b>Keep up to date with AGP releases.</b>
                      <p>
                      Newer versions of AGP will keep the app up to date with the latest performance tooling. This will allow you to improve your app&#39;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.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>AGP 8.6+ (20 points)</div>
                  </td>
                  <td>
                      <b>Fully unlocked high impact performance tooling support</b>
                      <p>
                      By being on the latest version of AGP, this app is able to fully utilize the latest performance tooling. Under the hood improvements through <a href="http://developer.android.com/build/shrink-code">R8</a>, <a href="http://developer.android.com/topic/performance/baselineprofiles">Baseline Profiles</a> and <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Dex Layout Optimizations</a> are fully supported. Ensure to use these tools to improve your app&#39;s performance and user satisfaction.
                  </p></td>
                  <td>
                      <b>Keep up the good work.</b>
                      <p>
                      Stay up to date with the latest AGP releases to ensure that the app is always using the latest performance tooling. Make sure your <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Startup Profile</a> is correctly configured and your <a href="http://developer.android.com/topic/performance/baselineprofiles/create-baselineprofile target=">Baseline Profile</a> covers the most relevant user journeys. Also verify that your <a href="http://developer.android.com/build/shrink-code">R8 configuration</a> is working as intended. Check out the overall <a href="http://developer.android.com/performance">performance guidance</a> to see how your app runtime performance can be improved.
                  </p></td>
              </tr>
              
          </tbody>
      </table>
  </devsite-filter>
</div>
              
            </div>
          </div>
        </div>
      </div>
      <div class="devsite-landing-row-item">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-body">
            <div class="devsite-landing-row-item-labels">
              <span class="">Holistic improvements</span>
            </div>
            <h3 class="hide-from-toc no-link">
              Assess Minification and optimization using R8
            </h3>
            <div class="devsite-landing-row-item-description-content">
              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 <a href="http://developer.android.com/build/shrink-code#full-mode">full mode</a> to minify and optimize their code.
            </div>
            <div class="devsite-landing-row-item-buttons">
              
                

<div>
  <devsite-select id="minification-and-optimization">
      <select id="minification-and-optimization-select">
          <option selected="">Make an assessment</option>
          
            <option id="0">Not enabled (0 points)</option>
          
            <option id="5">Compatibility mode or major exceptions (-dontoptimize, -dontshrink) (5 points)</option>
          
            <option id="20">R8 full mode, minified, optimized and resource shrinking (20 points)</option>
          
      </select>
  </devsite-select>
  <devsite-filter>
      <table class="assessment-table">
          <thead>
              <tr>
                  <th>Evaluation</th>
                  <th>Recommendation</th>
              </tr>
          </thead>
          <tbody class="list">
              
              <tr>
                  <td class="hide">
                      <div>Not enabled (0 points)</div>
                  </td>
                  <td>
                      <b>This app is missing out on a lot of performance improvements.</b>
                      <p>
                      Not using <a href="http://developer.android.com/build/shrink-code">code shrinking and optimization via R8</a> is a huge missed opportunity to improve app performance. Many under the hood improvements are only available when R8 is enabled.
                  </p></td>
                  <td>
                      <b>Urgently enable R8 to unlock major performance improvements.</b>
                      <p>
                      Enable <a href="http://developer.android.com/build/shrink-code">R8</a> optimizations as soon as possible. This will unlock a lot of performance improvements. Then come back to take another assessment for more guidance.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Compatibility mode or major exceptions (-dontoptimize, -dontshrink) (5 points)</div>
                  </td>
                  <td>
                      <b>Disabling optimizations is a huge missed opportunity to improve app performance.</b>
                      <p>
                      This app&#39;s runtime performance is not fully optimized. This is a huge missed opportunity to improve app performance.
                  </p></td>
                  <td>
                      <b>Unlock performance potential by enabling R8 optimizations.</b>
                      <p>
                      Enable <a href="http://developer.android.com/build/shrink-code">R8</a> optimizations as soon as possible and remove any -dontoptimize and -dontshrink exceptions. This will also unlock the ability to enable other optimizations, like <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Dex Layout Optimizations</a>. After R8 is enabled in full mode, come back to take another assessment for more guidance.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>R8 full mode, minified, optimized and resource shrinking (20 points)</div>
                  </td>
                  <td>
                      <b>High performance potential unlocked.</b>
                      <p>
                      By enabling <a href="http://developer.android.com/build/shrink-code">R8</a> 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 <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Dex Layout Optimizations</a>.
                  </p></td>
                  <td>
                      <b>Ensure that keep rules are up to date.</b>
                      <p>
                      As the app continues to evolve, <a href="http://developer.android.com/build/shrink-code">R8</a> 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 <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Startup Profiles and Dex Layout Optimizations</a>?
                  </p></td>
              </tr>
              
          </tbody>
      </table>
  </devsite-filter>
</div>
              
            </div>
          </div>
        </div>
      </div>
      <div class="devsite-landing-row-item">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-body">
            <div class="devsite-landing-row-item-labels">
              <span class="">Startup performance</span>
            </div>
            <h3 class="hide-from-toc no-link">
              Assess Baseline Profile usage for app startup
            </h3>
            <div class="devsite-landing-row-item-description-content">
              <p>
                <a href="http://developer.android.com/topic/performance/baselineprofiles/overview">Baseline Profiles</a> 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?
              </p>
            </div>
            <div class="devsite-landing-row-item-buttons">
              
                

<div>
  <devsite-select id="baseline-profile-startup">
      <select id="baseline-profile-startup-select">
          <option selected="">Make an assessment</option>
          
            <option id="0">None / Unknown (0 points)</option>
          
            <option id="2">Manually, once or infrequently (2 points)</option>
          
            <option id="5">Manually for each release (5 points)</option>
          
            <option id="15">Automated for each release (15 points)</option>
          
            <option id="20">Automated for nightly builds and releases (20 points)</option>
          
      </select>
  </devsite-select>
  <devsite-filter>
      <table class="assessment-table">
          <thead>
              <tr>
                  <th>Evaluation</th>
                  <th>Recommendation</th>
              </tr>
          </thead>
          <tbody class="list">
              
              <tr>
                  <td class="hide">
                      <div>None / Unknown (0 points)</div>
                  </td>
                  <td>
                      <b>Not having a baseline profile is a huge missed opportunity.</b>
                      <p>
                      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&#39;t.
                  </p></td>
                  <td>
                      <b>Urgently adopt Baseline Profiles.</b>
                      <p>
                      <a href="http://developer.android.com/topic/performance/baselineprofiles">Baseline Profiles</a> 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.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Manually, once or infrequently (2 points)</div>
                  </td>
                  <td>
                      <b>Automation is key to keeping baseline profiles up to date.</b>
                      <p>
                      Updating baseline profiles manually can easily slip between the cracks. Especially if it&#39;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.
                  </p></td>
                  <td>
                      <b>Invest in automating Baseline Profile creation.</b>
                      <p>
                      The <a href="http://developer.android.com/topic/performance/baselineprofiles/configure-baselineprofiles">Baseline Profile Gradle plugin</a> 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.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Manually for each release (5 points)</div>
                  </td>
                  <td>
                      <b>Automation is key to keeping baseline profiles up to date.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Invest in automating Baseline Profile creation.</b>
                      <p>
                      The <a href="http://developer.android.com/topic/performance/baselineprofiles/configure-baselineprofiles">Baseline Profile Gradle plugin</a> 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.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Automated for each release (15 points)</div>
                  </td>
                  <td>
                      <b>Automation makes it easy to keep baseline profiles up to date.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Keep baseline profile coverage high. Consider nightly profile generation.</b>
                      <p>
                      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 <a href="http://developer.android.com/topic/performance/baselineprofiles/configure-baselineprofiles">Baseline Profile Gradle plugin</a> for how to further automate Baseline Profile creation.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Automated for nightly builds and releases (20 points)</div>
                  </td>
                  <td>
                      <b>This is the best way to keep baseline profiles up to date.</b>
                      <p>
                      A Baseline Profile that&#39;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!
                  </p></td>
                  <td>
                      <b>Continue improving Baseline Profile coverage.</b>
                      <p>
                      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.
                  </p></td>
              </tr>
              
          </tbody>
      </table>
  </devsite-filter>
</div>
              
            </div>
          </div>
        </div>
      </div>
      <div class="devsite-landing-row-item">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-body">
            <div class="devsite-landing-row-item-labels">
              <span class="">Startup performance</span>
            </div>
            <h3 class="hide-from-toc no-link">
              Assess Baseline Profiles usage for user journeys
            </h3>
            <div class="devsite-landing-row-item-description-content">
              <p>
                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.
              </p>
              How many user journeys are covered by Baseline Profiles?
            </div>
            <div class="devsite-landing-row-item-buttons">
              
                

<div>
  <devsite-select id="baseline-profile-user-journeys">
      <select id="baseline-profile-user-journeys-select">
          <option selected="">Make an assessment</option>
          
            <option id="0">None / Unknown (0 points)</option>
          
            <option id="5">App startup +1 user journey (5 points)</option>
          
            <option id="10">App startup +2 user journeys (10 points)</option>
          
            <option id="15">App startup +3 user journeys (15 points)</option>
          
      </select>
  </devsite-select>
  <devsite-filter>
      <table class="assessment-table">
          <thead>
              <tr>
                  <th>Evaluation</th>
                  <th>Recommendation</th>
              </tr>
          </thead>
          <tbody class="list">
              
              <tr>
                  <td class="hide">
                      <div>None / Unknown (0 points)</div>
                  </td>
                  <td>
                      <b>Missing out on runtime performance improvements.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Urgently add Baseline Profiles to improve runtime performance.</b>
                      <p>
                      Adopt <a href="http://developer.android.com/topic/performance/baselineprofiles">Baseline Profiles</a> 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&#39;s functionality. Come back and retake the assessment for an updated score and more guidance.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>App startup +1 user journey (5 points)</div>
                  </td>
                  <td>
                      <b>Missing out on runtime performance improvements.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Adopt Baseline Profiles for more user journeys.</b>
                      <p>
                      Adopt <a href="http://developer.android.com/topic/performance/baselineprofiles">Baseline Profiles</a> 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.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>App startup +2 user journeys (10 points)</div>
                  </td>
                  <td>
                      <b>Baseline Profiles offer more performance improvements.</b>
                      <p>
                      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.<br/>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.
                  </p></td>
                  <td>
                      <b>Continue adopting Baseline Profiles for more user journeys.</b>
                      <p>
                      Identify more user journeys that are critical to the app&#39;s functionality and adopt <a href="http://developer.android.com/topic/performance/baselineprofiles">Baseline Profiles</a> 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.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>App startup +3 user journeys (15 points)</div>
                  </td>
                  <td>
                      <b>Outstanding Baseline Profile coverage.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Expand Baseline Profile coverage to unlock full performance potential.</b>
                      <p>
                      Continue driving <a href="http://developer.android.com/topic/performance/baselineprofiles">Baseline Profile</a> adoption. Consider improving <a href="http://developer.android.com/build/shrink-code">R8</a> adoption to improve code size and overall app runtime performance. Also consider adopting <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Dex Layout Optimizations</a> to further improve app startup performance.
                  </p></td>
              </tr>
              
          </tbody>
      </table>
  </devsite-filter>
</div>
              
            </div>
          </div>
        </div>
      </div>
      <div class="devsite-landing-row-item">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-body">
            <div class="devsite-landing-row-item-labels">
              <span class="">Startup performance</span>
            </div>
            <h3 class="hide-from-toc no-link">
              Dex Layout Optimizations using Startup Profiles
            </h3>
            <div class="devsite-landing-row-item-description-content">
                <p>
                  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&#39;s DEX files.
                  With Startup Profiles, your app startup is usually between 15% and 30% faster than
                  with Baseline Profiles alone.
                </p>
                Does the app use <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Startup Profiles</a> to optimize the dex layout?
              
                <aside class="special">
                  <b>Important:</b> Dex Layout Optimizations using Startup Profiles require R8 in
                  full mode.
                </aside>
              </div>
            <div class="devsite-landing-row-item-buttons">
              
                

<div>
  <devsite-select id="dex-layout-optimizations">
      <select id="dex-layout-optimizations-select">
          <option selected="">Make an assessment</option>
          
            <option id="0">Unused / Unknown (0 points)</option>
          
            <option id="10">Main entry point (10 points)</option>
          
            <option id="15">Most entry points (15 points)</option>
          
      </select>
  </devsite-select>
  <devsite-filter>
      <table class="assessment-table">
          <thead>
              <tr>
                  <th>Evaluation</th>
                  <th>Recommendation</th>
              </tr>
          </thead>
          <tbody class="list">
              
              <tr>
                  <td class="hide">
                      <div>Unused / Unknown (0 points)</div>
                  </td>
                  <td>
                      <b>Huge missed opportunity to improve app startup performance.</b>
                      <p>
                      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&#39;s DEX files. With Startup Profiles, your app startup is usually between 15% and 30% faster than with Baseline Profiles alone.<br/>Startup Profiles are used to improve app startup performance. By not adopting <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Dex Layout Optimizations</a> via Startup Profiles, this app is missing out on a great opportunity to improve app startup performance and user satisfaction.
                  </p></td>
                  <td>
                      <b>Urgently invest in adopting Startup Profiles.</b>
                      <p>
                      Adopt <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Dex Layout Optimizations</a> 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.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Main entry point (10 points)</div>
                  </td>
                  <td>
                      <b>Optimized startup performance for the main entry point.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Consider covering more entry points.</b>
                      <p>
                      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 <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Startup Profiles</a> as well. This could be notifications or supplementary launcher icons.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Most entry points (15 points)</div>
                  </td>
                  <td>
                      <b>Covering the most used entry points is a great way to improve app startup performance.</b>
                      <p>
                      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.
                  </p></td>
                  <td>
                      <b>Investigate other performance improvements and keep regressions at bay.</b>
                      <p>
                      Ensure that the Startup Profile is generated automatically for each release build by automating the <a href="http://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations">Dex Layout Optimizations</a> task with the <a href="http://developer.android.com/topic/performance/baselineprofiles/configure-baselineprofiles">Baseline Profiles Gradle plugin</a>.<br/>Continue monitoring app startup performance with the <a href="http://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview">macrobenchmarks</a>
                  </p></td>
              </tr>
              
          </tbody>
      </table>
  </devsite-filter>
</div>
              
            </div>
          </div>
        </div>
      </div>
    <div class="devsite-landing-row-item">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-body">
            <div class="devsite-landing-row-item-labels">
              <span class="">Compose adoption</span>
            </div>
            <h3 class="hide-from-toc no-link">
              Compose adoption
            </h3>
            <div class="devsite-landing-row-item-description-content">
              More recent versions of <a href="http://developer.android.com/compose">Jetpack Compose</a> 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?
            </div>
            <div class="devsite-landing-row-item-buttons">
              
                

<div>
  <devsite-select id="compose-adoption">
      <select id="compose-adoption-select">
          <option selected="">Make an assessment</option>
          
            <option id="5">Not using Compose (5 points)</option>
          
            <option id="1">Compose 2022.10.00 - 2024.08.00 (1 points)</option>
          
            <option id="2">Compose 2024.01.00 - 2025.07.01 (2 points)</option>
          
            <option id="5">Compose 2025.08.00 or newer (5 points)</option>
          
      </select>
  </devsite-select>
  <devsite-filter>
      <table class="assessment-table">
          <thead>
              <tr>
                  <th>Evaluation</th>
                  <th>Recommendation</th>
              </tr>
          </thead>
          <tbody class="list">
              
              <tr>
                  <td class="hide">
                      <div>Not using Compose (5 points)</div>
                  </td>
                  <td>
                      <b>Start using Compose</b>
                      <p>
                      Jetpack Compose is Android&#39;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.
                  </p></td>
                  <td>
                      <b>Start migrating your UI to Jetpack Compose</b>
                      <p>
                      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 <a href="https://developer.android.com/develop/ui/compose/migrate">migration strategies</a>, or alternatively check our <a href="https://d.android.com/codelabs/jetpack-compose-migration">codelab</a> for a more hands-on project.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Compose 2022.10.00 - 2024.08.00 (1 points)</div>
                  </td>
                  <td>
                      <b>Missing many new features and performance improvements!</b>
                      <p>
                      By staying on an old version of Jetpack Compose, you&#39;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.
                  </p></td>
                  <td>
                      <b>Upgrade to a newer version as soon as possible</b>
                      <p>
                      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 <a href="https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html">release blog post</a>.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Compose 2024.01.00 - 2025.07.01 (2 points)</div>
                  </td>
                  <td>
                      <b>Latest Jetpack Compose offers better performance and new features</b>
                      <p>
                      By not adopting the latest Jetpack Compose versions, you&#39;re not getting all the bug fixes, performance improvements and new features that we&#39;re working on to help building your beautiful UIs.
                  </p></td>
                  <td>
                      <b>Upgrade to the newest version for additional performance improvements</b>
                      <p>
                      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 <a href="http://developer.android.com/develop/ui/compose/performance/stability/strongskipping">strong skipping mode</a>, 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.<br/><br/>You can check more information on what was released in the <a href="https://android-developers.googleblog.com/2024/05/whats-new-in-jetpack-compose-at-io-24.html">Compose 2024.09.00 blog post</a>.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Compose 2025.08.00 or newer (5 points)</div>
                  </td>
                  <td>
                      <b>Congratulations! This app is up to date with the latest stable Compose release.</b>
                      <p>
                      Using the latest version of Compose is a great way to benefit from the performance improvements in each new version of Compose.
                  </p></td>
                  <td>
                      <b>Keep up the good work</b>
                      <p>
                      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.
                  </p></td>
              </tr>
              
          </tbody>
      </table>
  </devsite-filter>
</div>
              
            </div>
          </div>
        </div>
      </div>
      <div class="devsite-landing-row-item">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-body">
            <div class="devsite-landing-row-item-labels">
              <span class="">Monitoring and optimization</span>
            </div>
            <h3 class="hide-from-toc no-link">
              Report fully drawn state
            </h3>
            <div class="devsite-landing-row-item-description-content">
              Calling <a href="http://developer.android.com/reference/android/app/Activity#reportFullyDrawn()"><code>reportFullyDrawn()</code></a>
              by using the <a href="http://developer.android.com/reference/kotlin/androidx/activity/FullyDrawnReporter"><code>FullyDrawnReporter</code></a>
              or <a href="http://developer.android.com/reference/kotlin/androidx/activity/compose/package-summary#ReportDrawn()"><code>ReportDrawn()</code></a>
              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.
            </div>
            <div class="devsite-landing-row-item-buttons">
              
                

<div>
  <devsite-select id="report-fully-drawn">
      <select id="report-fully-drawn-select">
          <option selected="">Make an assessment</option>
          
            <option id="0">Not using reportFullyDrawn() / FullyDrawnReporter (0 points)</option>
          
            <option id="5">Using reportFullyDrawn() / FullyDrawnReporter (5 points)</option>
          
      </select>
  </devsite-select>
  <devsite-filter>
      <table class="assessment-table">
          <thead>
              <tr>
                  <th>Evaluation</th>
                  <th>Recommendation</th>
              </tr>
          </thead>
          <tbody class="list">
              
              <tr>
                  <td class="hide">
                      <div>Not using reportFullyDrawn() / FullyDrawnReporter (0 points)</div>
                  </td>
                  <td>
                      <b>Missing out on under the hood improvements and performance metrics.</b>
                      <p>
                      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.<br/>If your app is performing lazy loading and the initial display doesn&#39;t include all resources, such as when your app is fetching images from the network, you might want to delay calling <a href="http://developer.android.com/reference/kotlin/androidx/activity/FullyDrawnReporter">reportFullyDrawn()</a> until after your app becomes usable so that you can include the list population as part of your benchmark timing. It&#39;s also important for the Android framework to know where a startup profile should stop being measured.
                  </p></td>
                  <td>
                      <b>Adopt reportFullyDrawn() / FullyDrawnReporter to unlock more detailed performance metrics.</b>
                      <p>
                      Use the <a href="http://developer.android.com/reference/kotlin/androidx/activity/FullyDrawnReporter">FullyDrawnReporter</a> API to report when the app is ready to be used. This will unlock more detailed performance metrics and enable monitoring of <a href="http://developer.android.com/topic/performance/vitals/launch-time#time-full">Time to Fully Drawn</a>.
                  </p></td>
              </tr>
              
              <tr>
                  <td class="hide">
                      <div>Using reportFullyDrawn() / FullyDrawnReporter (5 points)</div>
                  </td>
                  <td>
                      <b>Unlocked more detailed app startup performance metrics.</b>
                      <p>
                      This app is using the <a href="http://developer.android.com/reference/kotlin/androidx/activity/FullyDrawnReporter">FullyDrawnReporter</a> API to report when the app is ready to be used. This unlocks more detailed performance metrics and enables monitoring of <a href="http://developer.android.com/topic/performance/vitals/launch-time#time-full">Time to Fully Drawn</a>.
                  </p></td>
                  <td>
                      <b>Use information from TTFD to understand and improve app startup performance.</b>
                      <p>
                      The Android Framework as well as the Google Play Console provide detailed performance metrics for <a href="http://developer.android.com/topic/performance/vitals/launch-time#time-full">Time to Fully Drawn</a>. Use these metrics to understand and improve your app&#39;s startup performance.<br/>When using the <a href="http://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview">macrobenchmarks</a> you can also inspect traces to see what exactly is happening during app startup.
                  </p></td>
              </tr>
              
          </tbody>
      </table>
  </devsite-filter>
</div>
              
            </div>
          </div>
        </div>
      </div>
    </div>
  </section>

  <section class="devsite-landing-row devsite-landing-row-1-up android-illustrated-resources-secondary-small">
    <div class="devsite-landing-row-group">
      <div id="staticPerfScoreCard" class="devsite-landing-row-item devsite-landing-row-item-no-media">
        <div class="devsite-landing-row-item-description">
          <div class="devsite-landing-row-item-icon-container" size="small">
            <picture>
              <source class="devsite-landing-row-item-icon devsite-dark-theme" alt="" media="(prefers-color-scheme: none)" srcset="http://developer.android.com/static/images/picto-icons/layout_dt.svg" sizes="128px" loading="lazy"/>
                <img class="devsite-landing-row-item-icon" align="left" alt="" src="http://developer.android.com/static/images/picto-icons/layout.svg" sizes="128px" loading="lazy"/>
            </picture>
          </div>
          <div class="devsite-landing-row-item-body">
            <h2 class="hide-from-toc no-link score">
              <b id="staticPerfScore">0 out of 100 points</b>
            </h2>
            <div class="devsite-landing-row-item-description-content">
              Static App Performance Score
            </div>
          </div>
        </div>
      </div>
      <p id="staticPerfAnswers" class="answers">(0/7 questions answered)</p>
    </div>
  </section>

    
</div>
    
  
