Profile uruchamiania są podzbiorem profili podstawowych. Profile startowe są używane przez system kompilacji do dalszej optymalizacji zawartych w nich klas i metod przez poprawienie układu kodu w plikach DEX w pakiecie APK. Dzięki profilom startowym uruchamianie aplikacji jest nawet o 15% szybsze niż w przypadku samych profili podstawowych.
![](https://developer.android.com/static/topic/performance/images/dex-layout-optimizations.png?authuser=6&hl=pl)
Wymagania
Zalecamy korzystanie z profili startowych za pomocą następujących narzędzi:
- Jetpack Macrobenchmark w wersji 1.2.0 lub nowszej
- Wtyczka Androida do obsługi Gradle w wersji 8.2 lub nowszej
- Android Studio Iguana lub nowsza
Trzeba też skonfigurować w aplikacji te ustawienia:
- R8 włączony. Dla kompilacji wersji ustaw
isMinifyEnabled = true
. - Optymalizacje układu DEX włączone. W bloku
baselineProfile {}
pliku kompilacji modułu aplikacji ustawdexLayoutOptimization = true
.
Tworzenie profilu startupu
Jeśli używasz domyślnego szablonu generatora profili podstawowych, Android Studio tworzy profil startowy razem z profilem bazowym.
Ogólne kroki umożliwiające utworzenie i wygenerowanie profilu startowego są takie same jak podczas tworzenia profilu podstawowego.
Domyślnym sposobem utworzenia profilu startowego jest użycie szablonu modułu generatora profili podstawowych z Androida Studio. Obejmuje to interakcje podczas uruchamiania, które tworzą podstawowy profil startowy. Aby uzupełnić ten profil startowy o większą liczbę kluczowych ścieżek użytkownika, dodaj do bloku rule
kluczowe ścieżki użytkownika, który zawiera includeInStartupProfile
wartość true
. W przypadku prostych aplikacji wystarczy uruchomić MainActivity
. W przypadku bardziej złożonych aplikacji zastanów się nad dodaniem do niej najpopularniejszych punktów wejścia, takich jak uruchamianie aplikacji z ekranu głównego lub uruchamianie precyzyjnego linku.
Ten fragment kodu pokazuje generator profili podstawowych (domyślnie plik BaselineProfileGenerator.kt
), który umożliwia uruchomienie aplikacji z poziomu ekranu głównego i przejście do precyzyjnego linku. Precyzyjny link prowadzi bezpośrednio do kanału wiadomości w aplikacji, a nie na jej ekran główny.
@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {
@get:Rule
val rule = BaselineProfileRule()
@Test
fun generate() {
rule.collect(
packageName = "com.example.app",
includeInStartupProfile = true
) {
// Launch directly into the NEWS_FEED.
startActivityAndWait(Intent().apply {
setPackage(packageName)
setAction("com.example.app.NEWS_FEED")
})
}
}
}
Uruchom konfigurację Generateline Profile for app (Wygeneruj profil podstawowy dla aplikacji) i znajdź reguły profilu startowego na stronie src/<variant>/generated/baselineProfiles/startup-prof.txt
.
Potwierdź optymalizację profili uruchamiania
Aby potwierdzić optymalizację układu DEX, otwórz plik APK w Android Studio i zweryfikuj klasy w plikach DEX. Upewnij się, że pole podstawowe classes.dex
nie jest wypełnione w pełni. Jeśli aplikacja zawiera 1 plik DEX, po włączeniu profilu startowego możesz sprawdzić, czy zawiera ona 2 pliki DEX.
Jeśli klasa startowa nie mieści się w jednym pliku DEX, Android Studio wyświetla ostrzeżenie.
Aby uzyskać informacje diagnostyczne obejmujące liczbę metod niezwiązanych z uruchamianiem w klasach startowych, upewnij się, że kompilator R8 jest zaktualizowany do wersji co najmniej 8.3.36-dev. Aby to zrobić, podczas stosowania profilu startowego wprowadź w pliku settings.gradle
te zmiany:
Kotlin
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.6-dev") } } }
Odlotowy
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
Pamiętaj, aby podczas tworzenia za pomocą Gradle dodać --info
po assembleRelease
w poniższym poleceniu.
./gradlew assembleRelease --info
Na terminalu pojawi się komunikat diagnostyczny.
Jeśli Twoja aplikacja lub jakiekolwiek biblioteki odwołują się do wycofanych interfejsów API, pakiety tych implementacji zgodności klas są zawsze zawarte w ostatnim pliku DEX. Ten wycofywany ostatni plik DEX nie jest uwzględniany przy optymalizacji układu DEX.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy JavaScript jest wyłączony
- Tworzenie profili podstawowych {:#using-profile-rules}
- Profile podstawowe {:#baseline-profiles}
- Tworzenie mikrotestu