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. |
Ta niewielka aktualizacja zapewnia zgodność z nowymi ustawieniami domyślnymi oraz funkcje dla widoczność pakietów na 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 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:
-
Dodaj flagę
-Pandroid.enableProfileJson=true
, gdy uruchamianiu kompilacji Gradle. Na przykład:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Otwórz przeglądarkę Chrome i wpisz
chrome://tracing
w na pasku wyszukiwania. -
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:
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"; } }