Profile bazowe zwiększają szybkość wykonywania kodu o około 30% w porównaniu z pierwszym uruchomieniem, ponieważ unikają interpretacji i czynności kompilacji w czasie wykonywania (JIT) dla uwzględnionych ścieżek kodu.
Przesyłając profil podstawowy w aplikacji lub bibliotece, środowisko wykonawcze Androida (ART) może zoptymalizować określony kod ścieżek konwersji za pomocą kompilacji AOT (AOT), zapewniającą skuteczność, dla każdego nowego użytkownika i każdej aktualizacji aplikacji. Optymalizacja na podstawie profilu (PGO) umożliwia aplikacjom optymalizację uruchamiania, zmniejszenie opóźnień interakcji i poprawę ogólnej wydajności w czasie działania od pierwszego uruchomienia.
W rezultacie wzrost skuteczności bezpośrednio przekłada się na lepsze wskaźniki biznesowe, takie jak takich jak utrzymanie użytkowników, transakcje i oceny. Więcej informacji na ten temat znajdziesz wpływa na dane biznesowe w artykułach Josh, Lyft, TikTok i Zomato.
Zalety profili podstawowych
Dzięki profilom podstawowym wszystkie interakcje użytkownika, takie jak uruchamianie aplikacji, poruszanie się między ekranami czy przewijanie treści, są płynniejsze już od pierwszego uruchomienia. Zwiększając szybkość i responsywność aplikacji, Profile podstawowe mogą prowadzić do zwiększenia liczby aktywnych użytkowników dziennie i wyższego średniego wyniku współczynnik ponownych wizyt.
Profile podstawowe pomagają w optymalizacji wykraczającej poza uruchamianie aplikacji, ponieważ zapewniają wspólne interakcji użytkowników, które usprawniają czas działania aplikacji już od pierwszego uruchomienia. AOT z przewodnikiem kompilacja nie wymaga urządzeń użytkowników i można ją przeprowadzić raz na wersję na komputerze, a nie na urządzeniu mobilnym. Przez wysłanie wersji za pomocą w przypadku profilu bazowego, optymalizacje aplikacji są dostępne znacznie szybciej niż w samych profilach Cloud.
Jeśli nie używasz profilu Baseline, cały kod aplikacji jest kompilowany w pamięci przez JIT
po zinterpretowaniu lub zapisaniu w pliku odex
w tle, gdy funkcja
urządzenie jest nieaktywne. Po zainstalowaniu lub zaktualizowaniu aplikacji użytkownicy mają nieoptymalne
od chwili jego pierwszego uruchomienia, aż po zoptymalizowanie nowych ścieżek kodu.
Wiele aplikacji mierzy wzrost wydajności o około 30% po optymalizacji.
Profile uruchamiania
Profile startowe są podobne do profili podstawowych, ale różnica polega na
są używane podczas kompilowania, a nie do optymalizacji na urządzeniu. Start-up
jest używany do optymalizacji układu pliku DEX w celu skrócenia czasu uruchamiania.
Kod wskazany w profilu startowym jest umieszczany w podstawowym elemencie classes.dex
.
a pozostały kod – w osobnych plikach DEX. Pozwala to skrócić czas uruchamiania
przez zmniejszenie liczby błędów strony podczas uruchamiania aplikacji. Aby dowiedzieć się więcej o:
jak profile startowe i optymalizacje układu DEX mogą skrócić czas uruchamiania aplikacji
Więcej informacji: Optymalizacje i uruchamianie układu DEX
profili firm.
Rozpocznij
Aby rozpocząć optymalizację wydajności dotychczasowej aplikacji, zapoznaj się z sekcją Tworzenie punktu odniesienia Profile.
Minimalna zalecana liczba wersji stabilnych
Łańcuch zależności zapewnia wersje stabilne i rozwojowe. Do wygenerować i zainstalować profil Baseline, użyć następujących obsługiwanych wersji lub wtyczki Androida do obsługi Gradle, biblioteki Macrobenchmark i programu Instalator profilu. Zależności te są wymagane w różnym czasie i stanowią podstawę łańcuch narzędzi, aby włączyć optymalny profil podstawowy.
- Wtyczka Androida do obsługi Gradle:
com.android.tools.build:8.0.0
- Biblioteka analizy porównawczej:
androidx.benchmark:benchmark-macro-junit4:1.3.0
- Instalator profilu:
androidx.profileinstaller:profileinstaller:1.3.1
Do utworzenia punktu odniesienia i zarządzania nim zalecamy używanie najnowszej wersji AGP Profile. Oto główne funkcje dostępne w różnych wersjach AGP:
Wersja AGP | Funkcje |
---|---|
8.4 | Lokalne instalacje aplikacji z kompilacji, których nie można debugować, za pomocą Narzędzie wiersza poleceń kodu Gradle lub Android Studio, instalując profile Baseline, lokalnej wersji kompilacji jest bardziej zbliżone do wersji produkcyjnej. Ten nie ma wpływu na wydajność produkcyjną profili podstawowych. |
8.3 |
|
8.2 |
|
z Androidem 8.0 | Minimalna zalecana wersja: użyj wtyczki Gradle profilu Baseline do generowania profili podstawowych za pomocą pojedynczego zadania Gradle.
|
7.4 |
Minimalna obsługiwana wersja: aplikacje mogą korzystać z profili podstawowych.
z bibliotek i udostępnić własny profil podstawowy
src/main/baseline-prof.txt .
|
Przykład generowania profilu
Poniżej znajduje się przykładowa klasa tworzenia profilu podstawowego na potrzeby uruchamiania aplikacji: oraz kilka zdarzeń nawigacji i przewijania za pomocą Makroanaliza biblioteka:
@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()
}
}
}
Pełny kontekst i szczegółowy opis kodu znajdziesz w przykłady wydajności GitHub.
Co uwzględnić?
Jeśli używasz profili podstawowych w aplikacji, możesz dołączyć kod uruchamiania aplikacji oraz typowe interakcje użytkowników, takie jak nawigacja między ekranami lub przewijanie. Dostępne opcje Gromadzić też całe procesy, takie jak rejestracja, logowanie czy płatność. Dowolny użytkownik ścieżek, które uważasz za kluczowe, mogą skorzystać z profili podstawowych dzięki ulepszeniu wydajność działania w czasie działania.
Jeśli eksperymentujesz z różnymi metodami zwiększania skuteczności, warto uwzględnić profile podstawowe w obu grupach eksperymentu. Dzięki temu wyniki łatwiej będzie interpretować, ponieważ wszyscy użytkownicy będą uruchamiać skompilowany kod.
Biblioteki mogą udostępniać własne profile bazowe i przesyłać je wraz z wersjami, aby poprawić wydajność aplikacji. Przykładem może być sekcja Korzystanie z profilu bazowego w Jetpack Compose.
Jak działają profile podstawowe
Podczas tworzenia aplikacji lub biblioteki warto rozważyć zdefiniowanie profili podstawowych, obejmują typowe interakcje użytkowników, w przypadku których ważny jest czas renderowania i opóźnienia. Oto jak to działa:
Zrozumiałe dla człowieka reguły dotyczące profilu są generowane dla Twojej aplikacji i scalane w w postaci binarnej. Znajdziesz je w
assets/dexopt/baseline.prof
. Następnie możesz w zwykły sposób przesłać pakiet aplikacji na Androida do Google Play.Google Play przetwarza profil i wysyła go bezpośrednio do użytkowników wraz z plik APK. Podczas instalacji ART wykonuje kompilację AOT metod podanych w dzięki czemu metody te działają szybciej. Jeśli profil zawiera metody używane podczas uruchamiania aplikacji lub podczas renderowania klatek, użytkownik może zauważyć szybsze uruchamianie i mniejsze zacięcia.
Ten proces współpracuje z agregacją profili Cloud w celu dostrajania wydajność przy użyciu aplikacji na podstawie rzeczywistego użytkowania w danym okresie.
Profile Cloud
Profile w chmurze to dodatkowa forma PGO (zagregowana według Google Play) Przechowuj i rozpowszechniaj na potrzeby kompilacji czasu instalacji – razem z punktem odniesienia Profile.
Chociaż profile w Cloud są tworzone na podstawie rzeczywistych interakcji użytkowników z aplikacją, ich dystrybucja zajmuje od kilku godzin do kilku dni, co ogranicza ich dostępność. Do momentu pełnego rozpowszechnienia profili aplikacja wydajność nie jest optymalna w przypadku użytkowników nowych lub zaktualizowanych aplikacji. Poza tym Google Cloud Profile obsługują tylko urządzenia z Androidem 9 (poziom interfejsu API 28) lub i dobrze skalować się tylko w przypadku aplikacji z wystarczająco dużą bazą użytkowników.
Kompilowanie w różnych wersjach Androida
Wersje na platformie Android korzystają z różnych metod kompilacji aplikacji. W każdej z nich w odpowiednim stopniu wydajności. Profile podstawowe są lepsze od poprzednich metod kompilacji, tworząc profil dla wszystkich instalacji.
Wersja Androida | Metoda kompilacji | Podejście do optymalizacji |
---|---|---|
5–6 (poziom interfejsu API 21–23) | Pełne AOT | Cała aplikacja jest zoptymalizowana podczas instalacji, co daje długie czasy oczekiwania na użycie zwiększoną ilość pamięci RAM wykorzystanie miejsca na dysku oraz dłuższy czas wczytywania kodu z dysku, potencjalnie zwiększenie liczby uruchomień „na zimno” razy. |
Od 7 do 8.1 (interfejs API poziomy 24–27) | Częściowy AOT (wartość bazowa) Profil) | Profile podstawowe są
zainstalowane przez:
androidx.profileinstaller
przy pierwszym uruchomieniu,
Ten moduł
zależności. reklamy ART mogą być lepsze
o to dalej, dodając
dodatkowe reguły profilu
podczas używania aplikacji,
i skompilować je, gdy
urządzenie jest nieaktywne. Ten
optymalizuje pod kątem miejsca na dysku
i godzina na wczytanie kodu
i w ten sposób ograniczyć ilość miejsca na dysku,
czas oczekiwania na aplikację. |
9 (poziom 28 interfejsu API) lub wyższy | Częściowy AOT (punkt odniesienia + profil Cloud) | Google Play używa profili podstawowych podczas instalacji zoptymalizuj pakiet APK i usługę Cloud profile, jeśli są dostępne. Po instalacji ART profile są przesyłane do Odtworzenie i zebranie danych, a następnie udostępnione jako profile Cloud innym użytkownikom, zainstalować lub zaktualizować aplikację. |
Znane problemy
Poniżej znajdziesz listę możliwych problemów i rozwiązań, w przypadku których występują Trwają prace nad sposobami obejścia tego problemu:
Wygenerowanie profilu podstawowego może się nie udać z powodu ustawień uprawnień dla niektórych urządzeń, w tym OnePlus. Aby obejść ten problem, wyłącz Wyłącz monitorowanie uprawnień w Opcjach programisty. ustawieniach.
Generowanie profilu podstawowego nie jest obsługiwane na urządzeniach z Laboratorium Firebase, w tym urządzenia z Laboratorium zarządzanego przez Gradle (numer problemu 285187547).
Aby udostępnić profile bazowe dla bibliotek, użyj wtyczki Gradle do profilu bazowego w wersji co najmniej 1.2.3 lub AGP 8.3 (problem #313992099).
Jeśli generujesz profile podstawowe za pomocą polecenia
./gradlew app:generateBaselineProfile
, testy porównawcze w module testowym a jego wyniki są odrzucane. W takim przypadku możesz wygenerować tylko profile podstawowe, uruchamiając polecenie-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Ten problem został rozwiązany w wersji AGP 8.2.Polecenie do generowania profili podstawowych dla wszystkich typów kompilacji:
./gradlew app:generateBaselineProfile
– generuje tylko profile podstawowe dla: typu kompilacji wersji. Ten problem został rozwiązany w wersji AGP 8.1.Kanały dystrybucji aplikacji spoza Sklepu Google Play mogą nie obsługiwać użycia: Profile Baseline podczas instalacji. Użytkownicy aplikacji zainstalowanych za pomocą tych nie zauważysz korzyści, dopóki nie zostanie uruchomiona deksoptacja w tle, prawdopodobnie w nocy.
Wewnętrzne udostępnianie aplikacji w Sklepie Play nie obsługuje Profili Baseline; jednak ścieżka testu wewnętrznego co robi.
Optymalizowanie baterii w niektórych urządzeniach (np. urządzeniach Huawei) może zakłócać działanie aplikacji i zainstalować profil. Aby mieć pewność, że profile są zainstalowane wyłącz wszystkie optymalizacje baterii w urządzeniach testowych.
Dodatkowe materiały
Polecane dla Ciebie
- Uwaga: tekst linku wyświetla się, gdy JavaScript jest wyłączony
- Tworzenie profili podstawowych {:#Creation-profile-rules}
- Tworzenie i pomiar profili bazowych bez testu porównawczego
- Optymalizacja układu DEX i profile uruchamiania