Wtyczka Androida do obsługi Gradle w wersji 3.4.0 (kwiecień 2019 r.)

Ta wersja wtyczki Androida wymaga:

Wersja minimalna Wersja domyślna Uwagi
Gradle 5.1.1 5.1.1 Więcej informacji znajdziesz w sekcji Aktualizowanie Gradle. W przypadku Gradle w wersji 5.0 i nowszych domyślny rozmiar sterty pamięci demona Gradle zmniejsza się z 1 GB do 512 MB. Może to spowodować spadek wydajności kompilacji. Aby zastąpić to ustawienie domyślne, określ rozmiar sterty demona Gradle w pliku gradle.properties projektu.
SDK Build Tools 28.0.3 28.0.3 Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK.

3.4.3 (lipiec 2020 r.)

Ta niewielka aktualizacja zapewnia zgodność z nowymi ustawieniami domyślnymi i funkcjami widoczności pakietu w Androidzie 11.

Szczegółowe informacje znajdziesz w informacjach o wersji 4.0.1.

3.4.2 (lipiec 2019 r.)

Ta niewielka aktualizacja obsługuje Androida Studio 3.4.2 i zawiera różne poprawki błędów oraz ulepszenia działania. Listę ważnych poprawek błędów znajdziesz w odpowiednim poście na blogu o aktualizacjach.

3.4.1 (maj 2019 r.)

Ta niewielka aktualizacja obsługuje Androida Studio 3.4.1 i zawiera różne poprawki błędów oraz ulepszenia działania. Listę ważnych poprawek błędów znajdziesz w odpowiednim poście na blogu o aktualizacjach.

Nowe funkcje

  • Nowe konfiguracje zależności sprawdzania lint: działanie lintChecks uległo zmianie, a nowa konfiguracja zależności lintPublish została wprowadzona, aby zapewnić Ci większą kontrolę nad tym, które sprawdzania lint są pakowane w bibliotekach Androida.

    • lintChecks: jest to istniejąca konfiguracja, której należy używać do sprawdzania kodu, które mają być uruchamiane tylko podczas lokalnego kompilowania projektu. Jeśli dołączasz do opublikowanego pliku AAR testy lint za pomocą konfiguracji zależności lintChecks, musisz przenieść te zależności, aby zamiast tego używać nowej konfiguracji lintPublish opisanej poniżej.
    • lintPublish: Użyj tej nowej konfiguracji w projektach biblioteki do sprawdzania kodu za pomocą narzędzia lint, które chcesz uwzględnić w opublikowanym pliku AAR, jak pokazano poniżej. Oznacza to, że projekty, które korzystają z Twojej biblioteki, również stosują te testy.

    Poniższy przykładowy kod korzysta z obu konfiguracji zależności w lokalnym projekcie biblioteki Androida.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • Ogólnie zadania związane z pakowaniem i podpisywaniem powinny być wykonywane szybciej. Jeśli zauważysz spadek wydajności związany z tymi zadaniami, zgłoś błąd.

Zmiany w działaniu

  • Wycofanie wtyczki funkcji aplikacji błyskawicznych na Androida: ostrzeżenie: jeśli do tworzenia aplikacji błyskawicznej nadal używasz wtyczki com.android.feature, wtyczka Androida do obsługi Gradle w wersji 3.4.0 będzie wyświetlać ostrzeżenie o wycofaniu. Aby mieć pewność, że w przyszłych wersjach wtyczki nadal będzie można tworzyć aplikację błyskawiczną, przenieś ją do wtyczki z funkcjami dynamicznymi. Umożliwia ona też publikowanie zarówno wersji instalowanej, jak i błyskawicznej aplikacji z poziomu jednego pakietu Android App Bundle.

  • R8 włączony domyślnie: R8 integruje usuwanie cukru syntaktycznego, zmniejszanie rozmiaru, zaciemnianie, optymalizację i indeksowanie DEX w jednym kroku, co skutkuje znaczną poprawą wydajności kompilacji. Narzędzie R8 zostało wprowadzone we wtyczce Androida do obsługi Gradle w wersji 3.3.0 i jest teraz domyślnie włączone w przypadku projektów aplikacji i bibliotek Androida, które korzystają z wtyczki w wersji 3.4.0 lub nowszej.

Obraz poniżej przedstawia ogólny proces kompilacji przed wprowadzeniem R8.

Przed wprowadzeniem R8 ProGuard był innym etapem kompilacji niż dexing i desugaring.

W przypadku R8 usuwanie składni, zmniejszanie, zaciemnianie, optymalizacja i indeksowanie (D8) są wykonywane w jednym kroku, jak pokazano poniżej.

W przypadku R8 usuwanie składni, zmniejszanie, zaciemnianie, optymalizacja i indeksowanie DEX są wykonywane w jednym kroku kompilacji.

Pamiętaj, że R8 jest zaprojektowany do współpracy z dotychczasowymi regułami ProGuard, więc prawdopodobnie nie musisz nic robić, aby korzystać z R8. Jest to jednak inna technologia niż ProGuard, zaprojektowana specjalnie z myślą o projektach na Androida, więc zmniejszanie i optymalizacja mogą spowodować usunięcie kodu, którego ProGuard nie usunąłby. W takiej mało prawdopodobnej sytuacji może być konieczne dodanie dodatkowych reguł, aby zachować ten kod w danych wyjściowych kompilacji.

Jeśli masz problemy z używaniem R8, przeczytaj najczęstsze pytania dotyczące zgodności R8, aby sprawdzić, czy istnieje rozwiązanie Twojego problemu. Jeśli rozwiązanie nie jest udokumentowane, zgłoś błąd. Aby wyłączyć R8, dodaj jeden z tych wierszy do pliku gradle.properties projektu:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Uwaga: jeśli w pliku build.gradle modułu aplikacji ustawisz wartość useProguard na false, wtyczka Androida do obsługi Gradle będzie używać R8 do zmniejszania kodu aplikacji w przypadku danego typu kompilacji, niezależnie od tego, czy wyłączysz R8 w pliku gradle.properties projektu.

  • ndkCompile jest wycofany: jeśli spróbujesz użyć ndkBuild do skompilowania bibliotek natywnych, pojawi się błąd kompilacji. Zamiast tego użyj CMake lub ndk-build, aby dodać do projektu kod w językach C i C++.

Znane problemy

  • Prawidłowe używanie unikalnych nazw pakietów nie jest obecnie wymuszane, ale w późniejszych wersjach wtyczki będzie bardziej rygorystyczne. W przypadku wtyczki Androida do obsługi Gradle w wersji 3.4.0 możesz włączyć sprawdzanie, czy projekt deklaruje akceptowalne nazwy pakietów, dodając poniższy wiersz do pliku gradle.properties.

              android.uniquePackageNames = true
              
            

    Więcej informacji o ustawianiu nazwy pakietu za pomocą wtyczki Androida do obsługi Gradle znajdziesz w artykule Ustawianie identyfikatora aplikacji.