Profile podstawowe zwiększają szybkość wykonywania kodu o około 30% od pierwszego uruchomienia, ponieważ unikają interpretacji i kroków kompilacji just-in-time (JIT) w przypadku uwzględnionych ścieżek kodu.
Dzięki profilowi podstawowemu w aplikacji lub bibliotece środowisko wykonawcze Androida (ART) może optymalizować określone ścieżki kodu za pomocą kompilacji AOT (Ahead-of-Time), co zwiększa wydajność każdego nowego użytkownika i każdej aktualizacji aplikacji. Optymalizacja z użyciem profilu (PGO) umożliwia aplikacjom optymalizację uruchamiania, zmniejszenie zacinania się interakcji i poprawę ogólnej wydajności działania od pierwszego uruchomienia.
Te ulepszenia wydajności bezpośrednio przekładają się na lepsze wskaźniki biznesowe, takie jak utrzymanie użytkowników, transakcje i oceny. Więcej informacji o tym, jak wydajność wpływa na dane biznesowe, znajdziesz w historiach Josha, Lyfta, TikToka i Zomato.
Zalety profili podstawowych
Profile bazowe sprawiają, że wszystkie interakcje użytkownika – takie jak uruchamianie aplikacji, przechodzenie między ekranami czy przewijanie treści – są płynniejsze od pierwszego uruchomienia. Zwiększenie szybkości i czasu reakcji aplikacji dzięki profilom bazowym może przełożyć się na większą liczbę aktywnych użytkowników dziennie i wyższy średni wskaźnik ponownych wizyt.
Profile podstawowe pomagają w optymalizacji wykraczającej poza uruchamianie aplikacji, ponieważ zawierają typowe interakcje użytkowników, które poprawiają działanie aplikacji od pierwszego uruchomienia. Kompilacja AOT z przewodnikiem nie zależy od urządzeń użytkowników i może być przeprowadzana raz na wersję na komputerze deweloperskim zamiast na urządzeniu mobilnym. Dzięki dostarczaniu wersji z profilem podstawowym optymalizacje aplikacji stają się dostępne znacznie szybciej niż w przypadku korzystania tylko z profili w chmurze.
Jeśli nie używasz profilu podstawowego, cały kod aplikacji jest kompilowany w pamięci w trybie JIT po zinterpretowaniu lub zapisywany w pliku odex
w tle, gdy urządzenie jest bezczynne. Po zainstalowaniu lub zaktualizowaniu aplikacji użytkownicy mają gorsze wrażenia od pierwszego uruchomienia aplikacji do momentu zoptymalizowania nowych ścieżek kodu.
Po optymalizacji wiele aplikacji odnotowuje wzrost wydajności o około 30%.
Profile uruchamiania
Profile uruchamiania są podobne do profili podstawowych, ale różnica polega na tym, że są używane w czasie kompilacji, a nie do optymalizacji na urządzeniu. Profil uruchamiania
służy do optymalizacji układu pliku DEX w celu skrócenia czasu uruchamiania.
Kod zidentyfikowany w profilu uruchamiania jest umieszczany w głównym pliku classes.dex
, a pozostały kod – w osobnych plikach DEX. Skraca to czas uruchamiania, ponieważ zmniejsza liczbę błędów strony podczas uruchamiania aplikacji. Więcej informacji o tym, jak optymalizacje układu DEX i profile uruchamiania mogą skrócić czas uruchamiania aplikacji, znajdziesz w artykule Optymalizacje układu DEX i profile uruchamiania.
Rozpocznij
Aby rozpocząć optymalizację wydajności w istniejącej aplikacji, zapoznaj się z artykułem Tworzenie profili bazowych.
Minimalne zalecane wersje stabilne
Łańcuch zależności udostępnia stabilne i rozwojowe wersje. Aby wygenerować i zainstalować profil podstawowy, użyj tych wersji wtyczki Androida do obsługi Gradle, biblioteki Macrobenchmark i instalatora profili lub nowszych. Te zależności są wymagane w różnych momentach i współpracują ze sobą jako łańcuch narzędzi, aby umożliwić optymalny profil podstawowy.
- Wtyczka Androida do obsługi Gradle:
com.android.tools.build:8.0.0
- Biblioteka makrobenchmarków:
androidx.benchmark:benchmark-macro-junit4:1.3.4
- Instalator profilu:
androidx.profileinstaller:profileinstaller:1.4.1
Do tworzenia profili podstawowych i zarządzania nimi zalecamy używanie najnowszej wersji AGP. Oto główne funkcje dostępne w różnych wersjach AGP:
Wersja AGP | Funkcje |
---|---|
8.4 | Lokalne instalacje aplikacji w przypadku kompilacji, których nie można debugować, za pomocą narzędzia wiersza poleceń Gradle Wrapper lub Androida Studio instalują profile bazowe, dzięki czemu wydajność lokalnej kompilacji wersji jest bardziej zbliżona do wydajności wersji produkcyjnej. Ta aktualizacja nie wpływa na wydajność profili podstawowych w środowisku produkcyjnym. |
8.3 |
|
8.2 |
|
z Androidem 8.0 | Minimalna zalecana wersja: użyj wtyczki Baseline Profile Gradle, aby wygenerować profile bazowe za pomocą jednego zadania Gradle.
|
7.4 |
Minimalna obsługiwana wersja: aplikacje mogą korzystać z profili podstawowych z bibliotek i udostępniać własny profil podstawowy w pliku src/main/baseline-prof.txt .
|
Przykład generowania profilu
Oto przykładowa klasa do tworzenia profilu podstawowego na potrzeby uruchamiania aplikacji, a także kilku zdarzeń nawigacji i przewijania za pomocą zalecanej biblioteki Macrobenchmark:
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
Ten kod w pełnym kontekście i bardziej szczegółowo znajdziesz w naszych przykładach wydajności na GitHubie.
Co uwzględnić?
Korzystając w aplikacji z profili podstawowych, możesz uwzględnić kod uruchamiania aplikacji i typowe interakcje użytkownika, takie jak nawigacja między ekranami czy przewijanie. Możesz też zbierać całe ścieżki, takie jak rejestracja, logowanie czy płatność. Profile bazowe mogą poprawić wydajność w czasie działania wszystkich ścieżek użytkownika, które uznasz za kluczowe.
Jeśli eksperymentujesz z różnymi metodami zwiększania wydajności, rozważ uwzględnienie profili podstawowych w obu grupach eksperymentu. Dzięki temu możesz ułatwić interpretację wyników, ponieważ wszyscy użytkownicy będą konsekwentnie uruchamiać skompilowany kod.
Biblioteki mogą udostępniać własne profile podstawowe i dołączać je do wersji, aby zwiększyć wydajność aplikacji. Na przykład zapoznaj się z sekcją Używanie profilu podstawowego w artykule o wydajności Jetpack Compose.
Jak działają profile podstawowe
Podczas tworzenia aplikacji lub biblioteki warto zdefiniować profile podstawowe, aby obejmowały typowe interakcje użytkowników, w przypadku których czas renderowania lub opóźnienie są ważne. Działają one w następujący sposób:
Dla Twojej aplikacji generowane są czytelne reguły profilu, które są kompilowane do postaci binarnej w aplikacji. Znajdziesz je w
assets/dexopt/baseline.prof
. Następnie możesz przesłać plik AAB do Google Play w zwykły sposób.Google Play przetwarza profil i wysyła go bezpośrednio do użytkowników wraz z plikiem APK. Podczas instalacji ART przeprowadza kompilację AOT metod w profilu, dzięki czemu są one wykonywane szybciej. Jeśli profil zawiera metody używane podczas uruchamiania aplikacji lub renderowania klatek, użytkownik może zauważyć krótszy czas uruchamiania i mniejsze zacinanie się.
Ten proces współpracuje z agregacją profili w chmurze, aby dostosowywać wydajność na podstawie rzeczywistego korzystania z aplikacji w czasie.

Profile w Google Cloud
Profile w chmurze stanowią dodatkową formę optymalizacji profilowej (PGO) – są agregowane przez Sklep Google Play i dystrybuowane na potrzeby kompilacji w czasie instalacji – wraz z profilami podstawowymi.
Profile w chmurze są tworzone na podstawie rzeczywistych interakcji użytkowników z aplikacją, ale ich dystrybucja po aktualizacji trwa od kilku godzin do kilku dni, co ogranicza ich dostępność. Dopóki profile nie zostaną w pełni rozpowszechnione, wydajność aplikacji będzie suboptymalna dla użytkowników nowych lub zaktualizowanych aplikacji. Profile w chmurze działają tylko na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub nowszym i skutecznie skalują się tylko w przypadku aplikacji z odpowiednio dużą bazą użytkowników.
Zachowanie kompilacji w różnych wersjach Androida
Wersje platformy Android wykorzystują różne metody kompilacji aplikacji, z którymi wiążą się różne kompromisy dotyczące wydajności. Profile podstawowe są ulepszeniem poprzednich metod kompilacji, ponieważ zapewniają profil dla wszystkich instalacji.
Wersja Androida | Metoda kompilacji | Podejście do optymalizacji |
---|---|---|
5–6 (poziom API 21–23) | Pełny AOT | Cała aplikacja jest optymalizowana podczas instalacji, co powoduje długi czas oczekiwania na możliwość korzystania z niej, zwiększone zużycie pamięci RAM i miejsca na dysku oraz dłuższy czas wczytywania kodu z dysku, co może wydłużyć czas zimnego startu. |
7 – 8.1 (interfejs API na poziomie 24–27) | Częściowa kompilacja AOT (profil podstawowy) | Profile podstawowe są instalowane przez androidx.profileinstaller przy pierwszym uruchomieniu, gdy moduł aplikacji definiuje tę zależność. ART może jeszcze bardziej poprawić wydajność, dodając dodatkowe reguły profilu podczas korzystania z aplikacji i kompilując je, gdy urządzenie jest nieaktywne. Pozwala to zoptymalizować wykorzystanie miejsca na dysku i czas wczytywania kodu z dysku, a tym samym skrócić czas oczekiwania na aplikację. |
9 (poziom 28 interfejsu API) i nowsze | Częściowa kompilacja AOT (profil podstawowy + profil w chmurze) | Podczas instalacji aplikacji Google Play używa profili bazowych, aby zoptymalizować plik APK i profile w chmurze (jeśli są dostępne). Po zainstalowaniu profile ART są przesyłane do Google Play, agregowane, a następnie udostępniane innym użytkownikom jako profile w chmurze, gdy instalują lub aktualizują aplikację. |
Znane problemy
Poniżej znajdziesz możliwe problemy i rozwiązania lub problemy, w przypadku których trwają prace nad obejściami:
Generowanie profilu podstawowego może się nie powieść z powodu ustawień uprawnień na niektórych urządzeniach, w tym na urządzeniach OnePlus. Aby obejść ten problem, wyłącz opcję Wyłącz monitorowanie uprawnień w Opcjach programisty.
Generowanie profilu podstawowego nie jest obsługiwane na urządzeniach Laboratorium Firebase, w tym na urządzeniach Laboratorium Firebase zarządzanych przez Gradle (problem nr 285187547).
Aby prawidłowo udostępniać profile podstawowe bibliotek, używaj wtyczki Gradle do profilu podstawowego w wersji 1.2.3 lub AGP 8.3 (co najmniej) (problem 313992099).
Jeśli wygenerujesz profile bazowe za pomocą polecenia
./gradlew app:generateBaselineProfile
, zostaną też uruchomione testy porównawcze w module testowym, a wyniki zostaną odrzucone. W takim przypadku możesz wygenerować tylko profile podstawowe, uruchamiając polecenie z parametrem-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
. Ten problem został rozwiązany w AGP 8.2.Polecenie generowania profili podstawowych dla wszystkich typów kompilacji –
./gradlew app:generateBaselineProfile
– generuje profile podstawowe tylko dla typu kompilacji wersji. Ten problem został rozwiązany w AGP 8.1.Kanały dystrybucji aplikacji inne niż Sklep Google Play mogą nie obsługiwać używania profili podstawowych podczas instalacji. Użytkownicy aplikacji zainstalowanych za pomocą tych kanałów nie zobaczą korzyści, dopóki nie zostanie uruchomiona optymalizacja dex w tle, co prawdopodobnie nastąpi w nocy.
Wewnętrzne udostępnianie aplikacji w Sklepie Play nie obsługuje profili podstawowych, ale obsługuje je ścieżka testu wewnętrznego.
Optymalizacja baterii na niektórych urządzeniach, np. Huawei, może utrudniać instalację profilu. Aby mieć pewność, że profile są instalowane skutecznie, wyłącz optymalizację baterii na urządzeniach testowych.
Dodatkowe materiały
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy JavaScript jest wyłączony.
- Tworzenie profili podstawowych {:#creating-profile-rules}
- Tworzenie i pomiar profili podstawowych bez użycia Macrobenchmark
- Optymalizacje układu DEX i profile uruchamiania