This document explains the difference between Baseline Profiles and Startup Profiles.
You can use the Baseline Profile Gradle Plugin to automatically capture the
human-readable baseline profile files generated by BaselineProfileRule
tests. When building the app, Android Gradle Plugin (AGP) compiles these
human-readable profile rules into a binary format, packaged as baseline.prof
within the Android Package Kit (APK) or Android App Bundle (AAB), that Android
Runtime (ART) can use effectively for on-device compilation, provided the binary
profile is smaller than 1.5 MB.
The profile files produced are typically named startup-prof.txt and
baseline-prof.txt.
Baseline Profile
The Baseline Profile file contains a comprehensive set of rules that ART uses to pre-compile frequently used code paths, which optimizes app startup, reduces interaction jank, and improves the overall runtime performance.
The Baseline Profile file is generally a superset of the rules found in your
Startup Profile. This file includes all rules required for app startup
optimization (generated through the baselineProfile Gradle task), along with
additional profiles for other critical user journeys. For example, scrolling,
and navigating different screens.
These non-startup rules are generated regardless of the value of the
includeInStartupProfile configuration field. For more information, see
Overview of Baseline Profiles.
Startup Profile
The Startup Profile file contains rules specifically optimized for your app's
startup path. During compilation, D8 and R8 consume Java bytecode to produce
Dalvik executable (DEX) files. Both D8 and R8 use Startup Profiles to
optimize DEX layout by placing critical startup code in the primary .dex file
for faster class loading. To achieve the most significant performance gains, the
startup code must be contained within this primary .dex file. If the
cumulative size of the startup code is too large, it overflows into subsequent
DEX files, which are often populated with non-essential classes and methods and
slows down startup.
While a Startup Profile provides the metadata necessary for DEX layout
optimization, R8 code optimization can be highly effective in assisting this
process. By removing unused code and minifying bytecode, R8 reduces the total
footprint of the startup logic. This reduction increases the likelihood that the
critical code remains within the primary .dex file, preventing overflow and
ensuring more efficient execution across a broader range of Android versions.
You should generally set includeInStartupProfile to true only for test
scenarios essential to the app's initial display.
For more information, see Overview of Startup Profiles.