Włączanie optymalizacji aplikacji

Aby zapewnić użytkownikom jak najlepsze wrażenia, zoptymalizuj aplikację, aby była jak najmniejsza i jak najszybsza. Nasz optymalizator aplikacji, R8, usprawnia aplikację, usuwając nieużywany kod i zasoby, przepisując kod w celu optymalizacji wydajności w czasie działania i wykonując inne działania. Dla użytkowników oznacza to:

  • szybciej uruchamiać aplikację,
  • Lepsze renderowanie i wydajność w czasie działania
  • Mniej błędów ANR

Aby włączyć optymalizację aplikacji, ustaw w skrypcie kompilacji na poziomie aplikacji wersji isMinifyEnabled = true (optymalizacja kodu) i isShrinkResources = true (optymalizacja zasobów), jak pokazano w tym kodzie. Zalecamy, aby zawsze włączać oba te ustawienia. Zalecamy też włączanie optymalizacji aplikacji tylko w ostatecznej wersji aplikacji, którą testujesz przed opublikowaniem – zwykle w wersji do udostępnienia. Optymalizacje wydłużają czas kompilacji projektu i mogą utrudniać debugowanie ze względu na sposób, w jaki modyfikują kod.

Kotlin

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            isMinifyEnabled = true

            // Enables resource shrinking.
            isShrinkResources = true

            proguardFiles(
                // Default file with automatically generated optimization rules.
                getDefaultProguardFile("proguard-android-optimize.txt"),

                ...
            )
            ...
        }
    }
    ...
}

Groovy

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            minifyEnabled true

            // Enables resource shrinking.
            shrinkResources true

            // Default file with automatically generated optimization rules.
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')

            ...
        }
    }
}

Optymalizacja zmniejszania zasobów w celu uzyskania jeszcze mniejszych aplikacji

Wtyczka Androida do obsługi Gradle (AGP) w wersji 8.12.0 wprowadza zoptymalizowane zmniejszanie zasobów, które ma na celu integrację optymalizacji zasobów i kodu, aby tworzyć jeszcze mniejsze i szybsze aplikacje.

Włączanie optymalnego zmniejszania zasobów

Aby włączyć nowy zoptymalizowany potok zmniejszania zasobów w wersji AGP starszej niż 9.0.0, dodaj do pliku gradle.properties projektu ten kod:

android.r8.optimizedResourceShrinking=true

Jeśli używasz AGP w wersji 9.0.0 lub nowszej, nie musisz ustawiać android.r8.optimizedResourceShrinking=true. Zoptymalizowane zmniejszanie zasobów jest stosowane automatycznie, gdy w konfiguracji kompilacji włączona jest opcja isShrinkResources = true.

Sprawdzanie i konfigurowanie ustawień optymalizacji R8

Aby włączyć w R8 pełne możliwości optymalizacji, usuń z pliku gradle.properties projektu ten wiersz (jeśli istnieje):

android.enableR8.fullMode=false # Remove this line from your codebase.

Pamiętaj, że włączenie optymalizacji aplikacji utrudnia zrozumienie śladów stosu, zwłaszcza jeśli R8 zmienia nazwy klas lub metod. Aby uzyskać ślady stosu, które prawidłowo odpowiadają Twojemu kodowi źródłowemu, przeczytaj artykuł Przywracanie oryginalnego śladu stosu.

Jeśli R8 jest włączony, warto też utworzyć profile uruchamiania, aby jeszcze bardziej zwiększyć wydajność uruchamiania.

Jeśli włączenie optymalizacji aplikacji spowoduje błędy, możesz je naprawić, stosując te strategie:

Jeśli chcesz zoptymalizować szybkość kompilacji, zapoznaj się z artykułem Konfigurowanie działania R8, w którym znajdziesz informacje o konfigurowaniu R8 w zależności od środowiska.

Zmiany w działaniu wtyczki Androida do obsługi Gradle i kompilatora R8

W tabeli poniżej znajdziesz najważniejsze funkcje wprowadzone w różnych wersjach wtyczki Androida do obsługi Gradle (AGP) i kompilatora R8.

Wersja AGP Wprowadzone funkcje
9.0 Zoptymalizowane zmniejszanie zasobów: domyślnie włączone (sterowane za pomocą android.r8.optimizedResourceShrinking). Zoptymalizowane zmniejszanie zasobów pomaga zintegrować zmniejszanie zasobów z potokiem optymalizacji kodu, co prowadzi do tworzenia mniejszych i szybszych aplikacji. Optymalizując jednocześnie kod i odwołania do zasobów, identyfikuje i usuwa zasoby, do których odwołuje się wyłącznie nieużywany kod. To znaczne ulepszenie w porównaniu z poprzednimi oddzielnymi procesami optymalizacji.

Jest to szczególnie przydatne w przypadku aplikacji, które udostępniają znaczne zasoby i kod w różnych formatach, z mierzalnymi ulepszeniami o ponad 50% w rozmiarze aplikacji. Wynikające z tego zmniejszenie rozmiaru prowadzi do mniejszych plików do pobrania, szybszej instalacji i lepszych wrażeń użytkowników dzięki szybszemu uruchamianiu, lepszemu renderowaniu i mniejszej liczbie błędów ANR.

Filtrowanie reguł biblioteki: usunięto obsługę opcji globalnych (np. -dontobfuscate) w regułach konsumenta biblioteki, a aplikacje będą je odfiltrowywać. Więcej informacji znajdziesz w artykule Dodawanie opcji globalnych.

Sprawdzanie wartości null w Kotlinie: domyślnie zoptymalizowane (kontrolowane za pomocą -processkotlinnullchecks). W tej wersji wprowadzono też znaczące ulepszenia szybkości kompilacji. Więcej informacji znajdziesz w artykule Opcje globalne dodatkowej optymalizacji.

Optymalizowanie konkretnych pakietów: możesz użyć packageScope, aby optymalizować konkretne pakiety. Jest to funkcja eksperymentalna. Więcej informacji znajdziesz w artykule Optymalizowanie określonych pakietów za pomocą packageScope.

Domyślnie zoptymalizowany: obsługa getDefaultProguardFile("proguard-android.txt") została wycofana, ponieważ zawiera -dontoptimize, którego należy unikać. Zamiast tego użyj zasady "proguard-android-optimize.txt". Jeśli chcesz globalnie wyłączyć optymalizację w aplikacji, ręcznie dodaj flagę do pliku ProGuard.
8.12 Zmniejszanie zasobów: dodano wstępną obsługę (domyślnie wyłączone). Włącz używanie isShrinkResources). Zmniejszanie zasobów działa w połączeniu z R8, aby skutecznie identyfikować i usuwać nieużywane zasoby.

Śledzenie wsteczne w Logcat: obsługa automatycznego śledzenia wstecznego w oknie Logcat w Android Studio.
8.6 Ulepszone śledzenie wsteczne: domyślnie obejmuje śledzenie wsteczne nazwy pliku i numeru wiersza na wszystkich poziomach minSdk (wcześniej wymagało to poziomu minSdk 26+ w wersji 8.2).

Aktualizacja R8 pomaga zapewnić, że ślady stosu z zaciemnionych kompilacji są łatwo i wyraźnie czytelne. Ta wersja poprawia mapowanie numerów wierszy i plików źródłowych, co ułatwia narzędziom takim jak Logcat w Android Studio automatyczne śledzenie awarii do oryginalnego kodu źródłowego.
z Androidem 8.0 Domyślnie tryb pełny: tryb pełny R8 zapewnia znacznie skuteczniejszą optymalizację. Jest ona domyślnie włączona. Możesz zrezygnować na stronie android.enableR8.fullMode=false.
7,0 Dostępny tryb pełny: wprowadzony jako funkcja, którą można włączyć za pomocą android.enableR8.fullMode=true. Tryb pełny stosuje bardziej zaawansowane optymalizacje, ponieważ zakłada, że kod używa odbicia i innych funkcji dynamicznych. Chociaż zmniejsza rozmiar aplikacji i zwiększa jej wydajność, może wymagać dodatkowych reguł zachowywania, aby zapobiec usunięciu niezbędnego kodu.