Wtyczka Androida do obsługi Gradle w wersji 3.6.0 (luty 2020)
Ta wersja wtyczki Androida wymaga:
| Wersja minimalna | Wersja domyślna | Uwagi | |
|---|---|---|---|
| Gradle | 5.6.4 | 5.6.4 | Więcej informacji znajdziesz w artykule o aktualizowaniu Gradle. |
| Narzędzia do kompilacji pakietu SDK | 28.0.3 | 28.0.3 | Zainstaluj lub skonfiguruj narzędzia SDK do kompilacji. |
Ta drobna aktualizacja obsługuje zgodność z nowymi ustawieniami domyślnymi i funkcjami dotyczącymi widoczności pakietów w Androidzie 11.
Szczegóły znajdziesz w informacjach o wersji 4.0.1.
Nowe funkcje
Ta wersja wtyczki Androida do obsługi Gradle zawiera te nowe funkcje.
Wyświetl powiązanie
Wyświetl powiązanie zapewnia bezpieczeństwo w czasie kompilacji podczas odwoływania się do widoków w
kodzie. Teraz możesz zastąpić findViewById() automatycznie wygenerowanym odwołaniem do klasy powiązania. Aby zacząć korzystać z wyświetlania powiązania,
dodaj ten kod do pliku build.gradle każdego modułu:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Więcej informacji znajdziesz w dokumentacji powiązania widoku.
Obsługa wtyczki Maven Publish
Wtyczka Androida do obsługi Gradle obsługuje wtyczkę Gradle Maven Publish, która umożliwia publikowanie artefaktów kompilacji w repozytorium Apache Maven. Wtyczka Androida do obsługi Gradle tworzy a komponent dla każdego artefaktu wariantu kompilacji w module aplikacji lub biblioteki, którego możesz użyć do dostosowania a publikacji w repozytorium Maven.
Więcej informacji znajdziesz na stronie dotyczącej korzystania z wtyczki Maven Publish.
Nowe domyślne narzędzie do pakowania
Podczas tworzenia wersji debugowania 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. Aby wrócić do
starego narzędzia do pakowania, dodaj ten kod do pliku
gradle.properties:
android.useNewApkCreator=false
Atrybucja kompilacji natywnej
Możesz teraz określić, ile czasu zajmuje Clangowi kompilacja i łączenie każdego pliku C/C++ w projekcie. Gradle może wygenerować ślad Chrome’a zawierający sygnatury czasowe tych zdarzeń kompilatora, dzięki czemu możesz lepiej zrozumieć, ile czasu zajmuje kompilacja projektu. Aby wygenerować ten plik atrybucji kompilacji, wykonaj te czynności:
-
Podczas uruchamiania kompilacji Gradle dodaj flagę
-Pandroid.enableProfileJson=truegdy. Na przykład:gradlew assembleDebug -Pandroid.enableProfileJson=true -
Otwórz przeglądarkę Chrome i w pasku wyszukiwania wpisz
chrome://tracingw. -
Kliknij przyc0}Wczytaj i przejdź do
<var>project-root</var>/build/android-profile, aby znaleźć plik. Plik ma nazwęprofile-<var>timestamp</var>.json.gz.
Dane atrybucji kompilacji natywnej znajdziesz u góry przeglądarki:

Zmiany w zachowaniu
Podczas korzystania z tej wersji wtyczki możesz zauważyć te zmiany w działaniu.
Domyślnie pakowane nieskompresowane biblioteki natywne
Podczas kompilowania aplikacji wtyczka domyślnie ustawia wartość
extractNativeLibs na "false". Oznacza to, że biblioteki natywne są wyrównane do strony i pakowane
bez kompresji. Chociaż powoduje to zwiększenie rozmiaru przesyłanego pliku, użytkownicy
mogą korzystać z tych zalet:
- Mniejszy rozmiar instalacji aplikacji, ponieważ platforma może uzyskiwać dostęp do bibliotek natywnych bezpośrednio z zainstalowanego pliku APK bez tworzenia kopii bibliotek.
- Mniejszy rozmiar pobierania, ponieważ kompresja w Sklepie Play jest zwykle lepsza, gdy w pliku APK lub pakiecie Android App Bundle znajdują się nieskompresowane biblioteki natywne.
Jeśli chcesz, aby wtyczka Androida do obsługi Gradle pakowała skompresowane biblioteki natywne, dodaj ten kod do manifestu aplikacji:
<application
android:extractNativeLibs="true"
... >
</application>
Uwaga: atrybut manifestu extractNativeLibs został zastąpiony opcją DSL useLegacyPackaging. Więcej informacji znajdziesz w informacjach o wersji
Korzystanie z DSL do pakowania skompresowanych
bibliotek natywnych.
Domyślna wersja NDK
Jeśli pobierzesz kilka wersji NDK, wtyczka Androida do obsługi Gradle
teraz wybierze 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ślną wersję wybraną przez wtyczkę, użyj właściwości android.ndkVersion w pliku modułu
build.gradle.
Uproszczone generowanie klasy R
Wtyczka Androida do obsługi Gradle upraszcza ścieżkę kompilacji, generując tylko 1 klasę R dla każdego modułu biblioteki w projekcie i udostępniając te klasy R innym zależnościom modułu. Ta optymalizacja powinna przyspieszyć kompilację, ale wymaga, aby pamiętać o tych kwestiach:
- Ponieważ kompilator udostępnia klasy R zależnościom modułu nadrzędnego , 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 zawiera bibliotekę B jako zależność „api”
biblioteka A i inne biblioteki zależne od biblioteki A mają
dostęp do klasy R biblioteki B. Jednak inne biblioteki mogą 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.
Usuwanie zasobów, których brakuje w konfiguracji domyślnej
W przypadku modułów biblioteki, jeśli uwzględnisz zasób dla języka, którego nie ma w domyślnym zestawie zasobów (np. jeśli uwzględnisz hello_world jako zasób tekstowy w /values-es/strings.xml, ale nie zdefiniujesz tego zasobu w /values/strings.xml), wtyczka Androida do obsługi Gradle nie będzie już uwzględniać tego zasobu podczas kompilowania projektu. Ta zmiana w działaniu
powinna zmniejszyć liczbę wyjątków środowiska wykonawczego Resource Not Found i przyspieszyć kompilację.
D8 uwzględnia teraz zasadę przechowywania CLASS w przypadku adnotacji
Podczas kompilowania aplikacji D8 uwzględnia teraz, kiedy adnotacje stosują zasadę przechowywania CLASS, a te adnotacje nie są już dostępne w czasie wykonywania. To zachowanie występuje też w przypadku ustawienia docelowego pakietu SDK aplikacji na poziom interfejsu API 23, który wcześniej umożliwiał dostęp do tych adnotacji w czasie wykonywania podczas kompilowania aplikacji za pomocą starszych wersji wtyczki Androida do obsługi Gradle i D8.
Inne zmiany w działaniu
-
aaptOptions.noCompressnie uwzględnia już wielkości liter na wszystkich platformach (zarówno w przypadku plików APK, jak i pakietów) i uwzględnia ścieżki, które używają wielkich liter. -
Wiązanie danych jest teraz domyślnie przyrostowe. Więcej informacji znajdziesz w artykule #110061530.
-
Wszystkie testy jednostkowe, w tym testy jednostkowe Robolectric, można teraz w pełni buforować. Więcej informacji znajdziesz w artykule #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 używają wiązania danych. Więcej informacji znajdziesz w artykule #126775542.
- Możesz teraz uruchamiać
connectedAndroidTestzadania w wielu modułach, gdy jest włączony tryb równoległego wykonywania Gradle.
Znane problemy
W tej sekcji opisujemy znane problemy, które występują w wtyczce Androida do obsługi Gradle w wersji 3.6.0.
Powolne działanie zadania Android Lint
W przypadku niektórych projektów wykonanie zadania Android Lint może trwać znacznie dłużej ze względu na a regresję w infrastrukturze analizy, co powoduje wolniejsze obliczanie typów wnioskowanych dla lambd w niektórych konstrukcjach kodu.
Problem został zgłoszony jako błąd w IDEA i zostanie rozwiązany w wtyczce Androida do obsługi Gradle w wersji 4.0.
Brakująca klasa manifestu {:#agp-missing-manifest}
Jeśli aplikacja definiuje w pliku manifestu uprawnienia niestandardowe, wtyczka Androida do obsługi Gradle zwykle generuje klasę Manifest.java, która zawiera uprawnienia niestandardowe jako stałe ciągi tekstowe. Wtyczka pakuje tę klasę z aplikacją, dzięki czemu możesz łatwiej odwoływać się do tych uprawnień w czasie wykonywania.
Generowanie klasy manifestu jest uszkodzone w wtyczce Androida do obsługi Gradle w wersji 3.6.0.
Jeśli skompilujesz aplikację za pomocą tej wersji wtyczki i odwołuje się ona do
klasy manifestu, może pojawić się wyjątek ClassNotFoundException. Aby rozwiązać ten problem, wykonaj jedną z tych czynności:
-
Odwołuj się do uprawnień niestandardowych za pomocą ich w pełni kwalifikowanej 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"; } }