Tworzenie profili uruchamiania

Profile uruchamiania są podzbiorem profili podstawowych. Systemy kompilacji używają profili startowych do dalszej optymalizacji zawartych w nich klas i metod przez ulepszenie układu kodu w plikach DEX w pakiecie APK. Dzięki profilom startowym uruchamianie aplikacji jest o co najmniej 15% szybsze niż przy samych profilach podstawowych.

Rysunek 1. Ulepszenie lokalizacji kodu dzięki optymalizacji układu DEX.

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 ustaw dexLayoutOptimization = 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.