Rozwiązywanie problemów z wydajnością kompilacji za pomocą Analizatora kompilacji

Sprawdź wydajność kompilacji swojego projektu za pomocą Analizatora kompilacji. W przypadku każdej wykonywanej kompilacji Analizator kompilacji próbuje przedstawić najważniejsze informacje, aby można było szybko zidentyfikować i rozwiązać problemy z regresjami wydajności kompilacji.

Informacje o innych strategiach zwiększania wydajności kompilacji znajdziesz w artykule Optymalizowanie szybkości kompilacji.

Rozpocznij

Za każdym razem, gdy kompilujesz aplikację, Analizator kompilacji tworzy raport i wyświetla dane z najnowszego raportu w oknie Kompilacji.

Aby rozpocząć, wykonaj następujące czynności:

  1. Utwórz aplikację na jeden z tych sposobów:
    • Na pasku menu kliknij Kompilacja > Utwórz projekt.
    • Aby utworzyć pakiet Android App Bundle lub plik APK, kliknij Build > Build Bundle / APK(s) > Build Bundle (Utwórz > Pakiety kompilacji / pliki APK > Utwórz pliki APK) na pasku menu.
  2. Aby otworzyć okno Kompilacja, na pasku menu wybierz Widok > Okna narzędzi > Kompilacja.
  3. Aby wyświetlić raport kompilacji w Analizatorze kompilacji, kliknij kartę Analizator kompilacji w oknie kompilacji.

Dane wyświetlane przez Analizator kompilacji mogą się zmieniać w różnych kompilacjach, dlatego pomocne jest wielokrotne utworzenie projektu i porównywanie danych w celu identyfikacji wzorców.

Wyświetl wtyczki z zadaniami określającymi czas trwania kompilacji

Gdy po raz pierwszy otworzysz Analizator kompilacji po ukończeniu kompilacji, w oknie pojawi się przegląd analizy kompilacji, jak widać na ilustracji 1.

Rysunek 1. Strona przeglądu Analizatora kompilacji zawiera podsumowanie wyników.

Aby zobaczyć podział wtyczek z zadaniami określającymi czas trwania kompilacji, na stronie przeglądu kliknij Wtyczki z zadaniami wpływającymi na czas kompilacji. Możesz też wybrać z menu Zadania i potwierdzić, że grupujesz według wtyczki. Wykres uporządkuje wtyczki i powiązane z nimi zadania według łącznego czasu ich wykonania.

Rysunek 2. Analizator kompilacji udostępnia zestawienie wtyczek, które wpływają na czas trwania kompilacji.

Wyświetl zadania określające czas trwania kompilacji

Aby wyświetlić zestawienie zadań, które przyczyniają się do czasu trwania kompilacji, kliknij Zadania wpływające na czas trwania kompilacji na stronie przeglądu lub wybierz z menu Zadania. Jeśli Twój projekt korzysta z AGP w wersji 8.0 lub nowszej, zadania są domyślnie pogrupowane według kategorii, dzięki czemu łatwiej jest zidentyfikować obszary, które wpływają na czas trwania kompilacji. Kliknij każde zadanie podrzędne, aby dowiedzieć się więcej o jego wykonaniu.

Rysunek 3. Analizator kompilacji udostępnia zestawienie zadań, które są najbardziej odpowiedzialne za czas trwania kompilacji.

Sprawdź ostrzeżenia

Jeśli Analizator kompilacji wykryje, że niektóre zadania można skonfigurować tak, aby działały bardziej wydajnie, wyświetli ostrzeżenie. Aby wyświetlić wszystkie ostrzeżenia wykryte przez Analizator kompilacji w kompilacji, kliknij Wszystkie ostrzeżenia na stronie przeglądu lub wybierz Ostrzeżenia z menu.

W niektórych ostrzeżeniach znajduje się link Wygeneruj raport (jak widać na ilustracji 4). Gdy klikniesz link Wygeneruj raport, pojawi się okno z dodatkowymi informacjami, które mogą pomóc deweloperowi wtyczki w rozwiązaniu problemu w nowej wersji wtyczki. Kliknij Kopiuj, aby zapisać tekst w schowku i łatwiej wkleić te informacje w raporcie o błędzie wysyłanym do dewelopera wtyczki.

Rysunek 4. Szczegółowe informacje o ostrzeżeniach Analizatora kompilacji.

Typy ostrzeżeń

Analizator kompilacji zgłasza te typy ostrzeżeń:

  • Zawsze uruchamiaj zadania: zawsze uruchomione zadanie powoduje, że przy każdej kompilacji są uruchamiane inne zadania, co jest niepotrzebne. Istnieją 2 główne powody, dla których może się ono pojawić:

    • (Częściej) Nie zadeklarowano prawidłowo danych wejściowych i wyjściowych dotyczących zadań. W takim przypadku prawidłowo zadeklaruj dane wejściowe i wyjściowe swoich zadań. Oznacza to samodzielne zadeklarowanie danych wejściowych i wyjściowych, w których możesz to zrobić, lub zmianę wersji wtyczki, jeśli zadania wywołujące ostrzeżenie pochodzą z wtyczek innych firm.

    • (Mniej typowe) Zadanie ma wartość upToDateWhen ustawioną na Fałsz, której należy unikać. Możliwe, że istnieje jakaś logika, która wskazuje, że fałsz, lub upToDateWhen jest na stałe zakodowany jako fałsz. Jeśli istnieje logika, która ocenia, że wynik jest fałszywy, taki wynik może być zamierzony i możesz zignorować ostrzeżenie. Jeśli parametr upToDateWhen jest zakodowany na stałe jako fałsz, usuń z kodu kodowanie.

  • Problemy z konfiguracją zadań: to ostrzeżenie jest generowane w przypadku zadań, które deklarują ten sam katalog jako dane wyjściowe. Oznacza to, że dane wyjściowe zadań najprawdopodobniej nie będą zachowywane między kompilacjami, a zadania te są zawsze uruchamiane, nawet jeśli nie ma żadnych zmian. Aby rozwiązać ten problem, zadeklaruj różne katalogi danych wyjściowych dla swoich zadań. Oznacza to samodzielne zadeklarowanie różnych katalogów wyjściowych, w których możesz to zrobić, lub zmianę wersji wtyczki, jeśli zadania wywołujące ostrzeżenie pochodzą z wtyczek innych firm.

  • Procesor adnotacji nieprzyrostowych: to ostrzeżenie jest generowane, jeśli procesor adnotacji nie jest przyrostowy i powoduje, że zadanie JavaCompile zawsze jest uruchamiane nieprzyrostowo. Aby rozwiązać ten problem, przejdź na przyrostowy podmiot przetwarzający adnotacje.

  • Pamięć podręczna konfiguracji: to ostrzeżenie wyświetla się, jeśli przechowywanie pamięci podręcznej konfiguracji nie jest włączone w projekcie. Analizator kompilacji analizuje sekwencję kompilacji, aby sprawdzić, czy Twój projekt jest zgodny z pamięcią podręczną konfiguracji. Jeśli testy zgodności zakończą się powodzeniem, możesz włączyć buforowanie konfiguracji w Analizatorze kompilacji.

  • Sprawdź Jetifier: to ostrzeżenie pojawia się, jeśli w projekcie znajduje się flaga enableJetifier i jest ona włączona, czyli gdy w pliku gradle.properties masz android.enableJetifier=true. Analizator kompilacji może sprawdzić, czy można bezpiecznie usunąć flagę. Pozwoli to projektowi zwiększyć wydajność kompilacji i przenieść się z niezarządzanych bibliotek pomocy Androida.

Sprawdzanie wpływu pobierania

Analizator kompilacji zawiera podsumowanie czasu poświęconego na pobieranie zależności oraz szczegółowy widok pobrań według repozytorium. Aby sprawdzić wpływ pobrań, wybierz z menu Pobrane. Te informacje są też dostępne w oknie synchronizacji.

Na podstawie tych informacji możesz określić, czy nieoczekiwane pobieranie zależności negatywnie wpływa na wydajność kompilacji. Jest to szczególnie ważne w przypadku kompilacji przyrostowych, które nie powinny regularnie pobierać artefaktów.

Tych informacji możesz w szczególności używać do identyfikowania problemów z konfiguracją, takich jak wykorzystanie dynamicznych wersji zależności, które powodują nieoczekiwane pobieranie plików. Jeśli zauważysz dużą liczbę nieudanych żądań dotyczących określonego repozytorium, może to oznaczać, że należy je usunąć lub przenieść niżej w konfiguracji repozytorium.

Rysunek 5. Analizator kompilacji pokazuje wpływ pobierania na czas trwania kompilacji.

[Tylko system Windows] Sprawdzanie wpływu oprogramowania antywirusowego

Analizator kompilacji informuje, czy oprogramowanie antywirusowe może wpływać na wydajność kompilacji. Może się tak zdarzyć, jeśli oprogramowanie antywirusowe, takie jak Windows Defender, skanuje w czasie rzeczywistym katalogi używane przez Gradle. Analizator kompilacji zaleca listę katalogów do wykluczenia ze skanowania. Jeśli to możliwe, udostępnia link umożliwiający dodanie ich do listy wykluczeń folderów programu Windows Defender.