Wtyczka Androida do obsługi Gradle 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 Aktualizowanie Gradle. |
Narzędzia do tworzenia pakietów SDK | 28.0.3 | 28.0.3 | Zainstaluj lub skonfiguruj narzędzia SDK Build Tools. |
Ta niewielka aktualizacja zapewnia zgodność z nowymi ustawieniami domyślnymi i funkcjami widoczności pakietów w Androidzie 11.
Szczegółowe informacje znajdziesz w informacjach o wersji 4.0.1.
Nowe funkcje
Ta wersja wtyczki Gradle na Androida zawiera te nowe funkcje:
Wyświetlanie powiązania
Wiązanie widoku zapewnia bezpieczeństwo w czasie kompilacji podczas odwoływania się do widoków w kodzie. Możesz teraz zastąpić findViewById()
automatycznie wygenerowanym odwołaniem do klasy wiążącej. Aby zacząć korzystać z wiązania widoku, w pliku build.gradle
każdego modułu umieść ten kod:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Więcej informacji znajdziesz w dokumentacji powiązań.
Obsługa wtyczki Maven Publish
Wtyczka Androida do obsługi Gradle zawiera obsługę wtyczki Maven Publish Gradle, która umożliwia publikowanie artefaktów kompilacji w repozytorium Apache Maven. Wtyczka Gradle na Androida tworzy komponent dla każdego artefaktu wariantu kompilacji w aplikacji lub module biblioteki, którego możesz użyć do dostosowania publikacji w repozytorium Maven.
Więcej informacji znajdziesz na stronie poświęconej korzystaniu z wtyczki Maven Publish.
Nowe domyślne narzędzie do pakowania
Podczas kompilowania wersji debugowej aplikacji wtyczka używa nowego narzędzia do pakowania o nazwie zipflinger, aby utworzyć plik APK. To nowe narzędzie powinno przyspieszyć kompilację. Jeśli nowe narzędzie do pakowania nie działa zgodnie z oczekiwaniami, zgłoś błąd. Możesz wrócić do korzystania ze starego narzędzia do pakowania, dodając do pliku gradle.properties
:
android.useNewApkCreator=false
Atrybucja natywnych wersji aplikacji
Możesz teraz określić, ile czasu zajmuje Clangowi kompilowanie i linkowanie każdego pliku C/C++ w Twoim projekcie. Gradle może wygenerować ślad Chrome zawierający sygnatury czasowe tych zdarzeń kompilatora, aby umożliwić Ci lepsze zrozumienie czasu potrzebnego na kompilację projektu. Aby wygenerować ten plik atrybucji kompilacji:
-
Dodaj flagę
-Pandroid.enableProfileJson=true
podczas uruchamiania kompilacji Gradle. Na przykład:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Otwórz przeglądarkę Chrome i na pasku wyszukiwania wpisz
chrome://tracing
. -
Kliknij przycisk Wczytaj i otwórz folder
<var>project-root</var>/build/android-profile
, aby znaleźć plik. Plik ma nazwęprofile-<var>timestamp</var>.json.gz
.
Dane atrybucji w przypadku natywnych aplikacji mobilnych znajdziesz u góry widoku:
Zmiany w działaniu
Podczas korzystania z tej wersji wtyczki możesz zauważyć te zmiany w zachowaniu.
Biblioteki natywne pakowane bez kompresji domyślnie
Podczas kompilowania aplikacji wtyczka ustawia parametr extractNativeLibs
na "false"
. Oznacza to, że biblioteki natywne są wyrównane do strony i zapakowane w nieskompresowany sposób. Chociaż powoduje to większy rozmiar przesyłanych plików, użytkownicy mają następujące korzyści:
- Mniejszy rozmiar instalowanej aplikacji, ponieważ platforma może uzyskać dostęp do natywnych bibliotek bezpośrednio z zainstalowanego pliku APK bez tworzenia kopii tych bibliotek.
- Mniejszy rozmiar pliku do pobrania, ponieważ kompresja w Google Play jest zazwyczaj lepsza, gdy w pliku APK lub pakiecie Android App Bundle są nieskompresowane biblioteki natywne.
Jeśli chcesz, aby wtyczka Androida do obsługi Gradle skompresowała biblioteki natywne, dodaj do pliku manifestu aplikacji te informacje:
<application
android:extractNativeLibs="true"
... >
</application>
Uwaga: atrybut manifestu extractNativeLibs
został zastąpiony opcją DSL useLegacyPackaging
. Więcej informacji znajdziesz w informacjach o wersji Używanie DSL do pakowania skompresowanych bibliotek natywnych.
Domyślna wersja NDK
Jeśli pobierzesz kilka wersji NDK, wtyczka Gradle dla Androida wybierze teraz domyślną wersję do użycia podczas kompilowania plików kodu źródłowego.
Wcześniej wtyczka wybierała najnowszą pobraną wersję NDK.
Aby zastąpić domyślne ustawienie wybrane przez wtyczkę, użyj właściwości android.ndkVersion
w pliku build.gradle
modułu.
Uproszczona generacja klasy R
Wtyczka Androida do obsługi Gradle upraszcza kompilację ścieżki klasy, ponieważ generuje tylko 1 klasę R dla każdego modułu biblioteki w projekcie i udostępnia te klasy innym zależnościom modułów. Ta optymalizacja powinna przynieść szybsze kompilacje, ale wymaga uwzględnienia tych kwestii:
- Kompilator udostępnia klasy R z zależnościami modułów źródłowych, dlatego ważne jest, aby każdy moduł w projekcie używał unikalnej nazwy pakietu.
- Widoczność klasy R biblioteki dla innych zależności projektu jest określana przez konfigurację używaną do uwzględnienia biblioteki jako zależności. Jeśli na przykład Biblioteka A obejmuje bibliotekę B jako zależność „api”, biblioteka A i inne biblioteki zależne od biblioteki A mają dostęp do klasy R biblioteki B. Inne biblioteki mogą jednak nie mieć dostępu do klasy R biblioteki B. Jeśli biblioteka A używa konfiguracji zależności
implementation
. Więcej informacji znajdziesz w artykule o konfiguracjach zależności.
Usuń zasoby, których brakuje w konfiguracji domyślnej
W przypadku modułów bibliotek, jeśli uwzględnisz zasób dla języka, którego nie uwzględniasz w domyślnym zestawie zasobów (np. uwzględnisz zasób hello_world
jako zasób ciągu tekstowego w pliku /values-es/strings.xml
, ale nie zdefiniujesz go w pliku /values/strings.xml
), wtyczka Android Gradle nie uwzględnia już tego zasobu podczas kompilowania projektu. Ta zmiana działania powinna zmniejszyć liczbę wyjątków środowiska wykonawczego Resource Not Found
i przyspieszyć kompilację.
D8 przestrzega teraz zasad dotyczących przechowywania CLASS w przypadku adnotacji
Podczas kompilowania aplikacji D8 uwzględnia teraz, kiedy adnotacje stosują zasadę CLASS retention policy, i te adnotacje nie są już dostępne w czasie wykonywania. To zachowanie występuje również wtedy, gdy ustawisz docelowy pakiet SDK aplikacji na poziom API 23, który wcześniej umożliwiał dostęp do tych adnotacji w czasie działania podczas kompilowania aplikacji za pomocą starszych wersji wtyczki Gradle i D8.
Inne zmiany w działaniu
-
aaptOptions.noCompress
nie jest już zależne od wielkości liter na wszystkich platformach (zarówno w przypadku plików APK, jak i pakietów) i uwzględnia ścieżki z użyciem wielkich liter. -
Połączenie danych jest teraz domyślnie stosowane stopniowo. Więcej informacji znajdziesz w artykule nr 110061530.
-
Wszystkie testy jednostkowe, w tym testy jednostkowe Roboelectric, są teraz w pełni buforowane. Więcej informacji znajdziesz w artykule o problemie nr 115873047.
Poprawki błędów
Ta wersja wtyczki Androida do obsługi Gradle zawiera te poprawki błędów:
- Testy jednostkowe Robolectric są teraz obsługiwane w modułach biblioteki, które korzystają z wiązania danych. Więcej informacji znajdziesz w problemie 126775542.
- Gdy włączony jest tryb wykonywania zadań równolegle w Gradle, możesz teraz wykonywać zadania
connectedAndroidTest
w wielu modułach.
Znane problemy
W tej sekcji opisano znane problemy występujące w wersji 3.6.0 wtyczki Androida do obsługi Gradle.
Powolny proces sprawdzania kodu Lint na Androidzie
W przypadku niektórych projektów wykonanie Android Lint może potrwać znacznie dłużej z powodu regresji w infrastrukturze analizowania, co powoduje wolniejsze obliczanie typów inferowanych dla funkcji lambda w niektórych konstrukcjach kodu.
Problem został zgłoszony jako błąd w IDE i zostanie rozwiązany w wersji 4.0 wtyczki Androida do obsługi Gradle.
Brak klasy pliku manifestu {:#agp-missing-manifest}
Jeśli w pliku manifestu aplikacji zdefiniowane są niestandardowe uprawnienia, wtyczka Androida do obsługi Gradle zwykle generuje klasę Manifest.java
, która zawiera niestandardowe uprawnienia w postaci stałych ciągów znaków. Wtyczka pakuje tę klasę w aplikacji, aby ułatwić Ci odwoływanie się do tych uprawnień w czasie działania.
Generowanie klasy manifestu jest uszkodzone w wersji 3.6.0 wtyczki Androida do obsługi Gradle.
Jeśli skompilujesz aplikację z tą wersją wtyczki i odwołuje się ona do klasy manifestu, możesz zobaczyć wyjątek ClassNotFoundException
. Aby rozwiązać ten problem, wykonaj jedną z tych czynności:
-
Odwołuj się do uprawnień niestandardowych według pełnej nazwy. Na 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"; } }