Wtyczka Androida do obsługi Gradle w wersji 3.6.0 (luty 2020 r.)

Ta wersja wtyczki na Androida wymaga:

Wersja minimalna Wersja domyślna Uwagi
Gradle 5.6.4 5.6.4 Więcej informacji znajdziesz w artykule na temat aktualizowania Gradle.
Narzędzia do tworzenia pakietów SDK 28.0.3 28.0.3 Zainstaluj lub skonfiguruj narzędzia SDK Build Tools.

Nowe funkcje

Ta wersja wtyczki Androida do obsługi Gradle zawiera te nowe funkcje zabezpieczeń.

Wyświetl powiązanie

Wyświetlanie powiązania zapewnia bezpieczeństwo podczas kompilacji podczas odnoszenia się do widoków w kod. Możesz teraz zastąpić element findViewById() funkcją odniesienie do automatycznie wygenerowanej klasy powiązania. Aby zacząć korzystać z powiązania widoku, w pliku build.gradle każdego modułu umieść:

      android {
          viewBinding.enabled = true
      }
      
      android {
          viewBinding.enabled = true
      }
      

Więcej informacji znajdziesz w sekcji Widok Dokumentacja wiązań.

Obsługa wtyczki Maven Publish

Wtyczka Androida do obsługi Gradle obsługuje Maven Publikowanie wtyczki Gradle, która umożliwia publikowanie artefaktów kompilacji w lub repozytorium Apache Maven. Wtyczka Androida do obsługi Gradle tworzy component dla każdego artefaktu wariantu kompilacji w aplikacji lub module biblioteki, który możesz służy do dostosowania publikacja do repozytorium Maven.

Więcej informacji znajdziesz na stronie przy użyciu narzędzia Maven Publish .

Nowe domyślne narzędzie do tworzenia pakietów

Podczas tworzenia wersji aplikacji do debugowania wtyczka używa nowego interfejsu narzędzia do tworzenia pakietów o nazwie zipflinger. Ten nowy powinno przyspieszyć kompilację. Jeśli nowe narzędzie do tworzenia pakietów nie działa zgodnie z oczekiwaniami, zgłoś błąd. Możesz wrócić do używając starego narzędzia do pakowania, umieszczając w Plik gradle.properties:

        android.useNewApkCreator=false
      

Atrybucja kompilacji natywnej

Możesz teraz określić czas potrzebny Clang na tworzenie połącz każdy plik C/C++ w projekcie. Gradle może wyświetlić log czasu Chrome który zawiera sygnatury czasowe zdarzeń tego kompilatora, dzięki czemu lepiej czas potrzebny na zbudowanie projektu. Aby wyświetlić dane wyjściowe tej kompilacji pliku atrybucji, wykonaj te czynności:

  1. Dodaj flagę -Pandroid.enableProfileJson=true, gdy uruchamianiu kompilacji Gradle. Na przykład:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. Otwórz przeglądarkę Chrome i wpisz chrome://tracing w na pasku wyszukiwania.

  3. Kliknij przycisk Wczytaj i przejdź do sekcji <var>project-root</var>/build/android-profile w celu znalezienia pliku. Plik nazywa się profile-<var>timestamp</var>.json.gz

Dane atrybucji kompilacji natywnych znajdziesz u góry widz:

Natywny log czasu atrybucji kompilacji w Chrome

Zmiany w działaniu

Podczas korzystania z tej wersji wtyczki możesz zobaczyć następujący komunikat: lub inne zmiany w działaniu.

Biblioteki natywne nieskompresowane przez domyślna

Gdy tworzysz aplikację, wtyczka ustawia teraz Z: extractNativeLibs do: "false", o: wartość domyślną. Oznacza to, że biblioteki natywne są wyrównane do strony i pakowane. bez kompresji. Mimo że powoduje to większy rozmiar przesyłanych plików, mogą zyskać następujące korzyści:

  • Mniejszy rozmiar instalacji aplikacji, ponieważ platforma ma dostęp do natywnej bezpośrednio z zainstalowanego pliku APK, bez tworzenia kopii pliku z bibliotekami.
  • Mniejszy rozmiar pliku do pobrania, ponieważ kompresja Sklepu Play jest zwykle lepiej gdy dodasz do pliku APK nieskompresowane biblioteki natywne lub Android App Bundle.

Jeśli chcesz, aby wtyczka Androida do obsługi Gradle była skompresowana biblioteki natywne, umieść w pliku manifestu aplikacji te elementy:

        <application
          android:extractNativeLibs="true"
          ... >
        </application>
        
      

Uwaga: plik manifestu extractNativeLibs. został zastąpiony atrybutem DSL useLegacyPackaging . Więcej informacji znajdziesz w informacjach o wersji Użyj DSL, by spakować skompresowane pliki z bibliotek natywnych.

Domyślna wersja NDK

Jeśli pobierasz różne wersje pakietu NDK, wtyczka Androida do obsługi Gradle teraz wybiera wersję domyślną używaną przy kompilowaniu plików z kodem źródłowym. Wcześniej wtyczka wybierała najnowszą pobraną wersję NDK. Użyj właściwości android.ndkVersion w module build.gradle, aby zastąpić domyślne ustawienie wybrane przez wtyczkę.

Uproszczone generowanie klasy R

Wtyczka Androida do obsługi Gradle upraszcza kompilację ścieżki klasy przez: generowanie tylko jednej klasy R dla każdego modułu biblioteki w projekcie oraz udostępniając te klasy R innym zależnościom modułów. Ta optymalizacja powinien przyspieszyć kompilację, ale wymaga przechowywania o których warto pamiętać:

  • Ponieważ kompilator udostępnia klasy R modułowi nadrzędnemu ważne jest, aby każdy moduł w projekcie unikalną nazwę pakietu.
  • Widoczność klasy R biblioteki dla innych zależności projektu zależy od konfiguracji użytej do uwzględnienia biblioteki jako zależności. Jeśli na przykład Biblioteka A zawiera bibliotekę B jako „api” biblioteki A i inne biblioteki zależne od biblioteki A, dostęp do klasy R biblioteki B. Inne biblioteki mogą jednak nie mieć dostęp do klasy R biblioteki B. Jeśli Biblioteka A używa parametru Konfiguracja zależności implementation. Aby się uczyć więcej, przeczytaj o zależność konfiguracji.

Usuń brakujące zasoby z domyślnego konfiguracja

W modułach Biblioteka, jeśli dołączysz zasób w języku, który znasz nie są dodawane do domyślnego zestawu zasobów – na przykład jeśli dołączysz hello_world jako zasób ciągu znaków w: /values-es/strings.xml, ale nie definiujesz tego zasobu w /values/strings.xml – wtyczka Androida do obsługi Gradle nie jest już uwzględnia go podczas kompilowania projektu. Ta zmiana działania powinna spowodować mniej Resource Not Found wyjątków czasu działania i zwiększyła szybkość kompilacji.

D8 działa teraz zgodnie z zasadami przechowywania zajęć dla adnotacji

Podczas kompilowania aplikacji D8 uwzględnia teraz przypadki zastosowania adnotacji do zajęć zasad przechowywania. Te adnotacje nie są już dostępne na w środowisku wykonawczym. Dzieje się tak też wtedy, gdy ustawiasz docelowy pakiet SDK aplikacji na Poziom interfejsu API na poziomie 23, który wcześniej zezwalał na dostęp do tych adnotacji podczas środowiska wykonawczego podczas kompilowania aplikacji przy użyciu starszych wersji Androida Gradle. i D8.

Inne zmiany w działaniu

  • Wielkość liter w elemencie aaptOptions.noCompress nie jest już rozróżniana (zarówno w przypadku plików APK, jak i pakietów) i respektuje ścieżki, w których używany jest plik wielkimi literami.
  • Wiązanie danych domyślnie odbywa się przyrostowo. Więcej informacji: numer problemu 110061530.

  • Wszystkie testy jednostkowe, w tym testy jednostkowe Roboelectric, są już w pełni wyposażone które można zapisać w pamięci podręcznej. Więcej informacji: numer problemu: 115873047.

Poprawki błędów

Ta wersja wtyczki Androida do obsługi Gradle zawiera ten błąd poprawki:

  • Testy jednostkowe Robolectric są teraz obsługiwane w modułach biblioteki, które używają parametru lub wiązania danych. Więcej informacji: numer problemu: 126775542.
  • Możesz teraz uruchamiać connectedAndroidTest zadań w a Gradle równoległe tryb wykonywania.

Znane problemy

W tej sekcji opisano znane problemy występujące we wtyczce Androida do obsługi Gradle 3.6.0

Powolne działanie zadania Android Lint

W niektórych projektach realizacja projektu Android Lint może potrwać znacznie dłużej ze względu na regresja w infrastrukturze analizy, co spowalnia obliczenia. typów wywnioskowanych na potrzeby funkcji lambda w określonych konstrukcjach kodu.

Problem jest zgłoszony jako błąd w IDEA i zostanie poprawione we wtyczce Androida do obsługi Gradle w wersji 4.0.

Brak klasy pliku manifestu {:#agp-missing-manifest}

Jeśli w pliku manifestu aplikacji są zdefiniowane niestandardowe uprawnienia, Android Wtyczka Gradle zwykle generuje klasę Manifest.java, która obejmuje niestandardowe uprawnienia w postaci stałych ciągów znaków. Pakiety wtyczek do tych zajęć w aplikacji, aby łatwiej uprawnień w czasie działania aplikacji.

Generowanie klasy pliku manifestu nie działa we wtyczce Androida do obsługi Gradle w wersji 3.6.0. Jeśli tworzysz aplikację przy użyciu tej wersji wtyczki i odwołuje się ona w klasie manifestu, możesz zobaczyć pole ClassNotFoundException wyjątek. Aby rozwiązać ten problem, wykonaj jedną z tych czynności:

  • odwoływać się do niestandardowych uprawnień, używając w pełni kwalifikowanej nazwy. Przykład: "com.example.myapp.permission.DEADLY_ACTIVITY"

  • Zdefiniuj własne stałe, jak pokazano poniżej:

                public final class CustomPermissions {
                  public static final class permission {
                    public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY";
                  }
                }