Wtyczka Androida do obsługi Gradle 4.1.0 (sierpień 2020 r.)
Zgodność
Wersja minimalna | Wersja domyślna | Uwagi | |
---|---|---|---|
Gradle | 6,5 | Nie dotyczy | Aby dowiedzieć się więcej, zobacz aktualizowanie Gradle. |
Narzędzia do tworzenia pakietów SDK | 29.0.2 | 29.0.2 | Zainstaluj lub skonfiguruj narzędzia do kompilacji SDK. |
NDK | Nie dotyczy | 21.1.6352462 | Zainstaluj lub skonfiguruj inną wersję pakietu NDK. |
Ta wersja wtyczki na Androida wymaga:
-
Gradle 6.5. Więcej informacji znajdziesz w sekcji na temat aktualizowania Gradle.
-
Narzędzia do kompilacji SDK w wersji 29.0.2 lub nowszej.
Domyślna wersja pakietu NDK w tej wersji to 21.1.6352462. Aby zainstalować inną wersję NDK, przeczytaj artykuł Instalowanie konkretnej wersji NDK.
Nowe funkcje
Ta wersja wtyczki Androida do obsługi Gradle zawiera te nowe funkcje.
Obsługa DSL Kotlin Script
Aby usprawnić edycję dla użytkowników skryptu kompilacji Kotlin, definicja DSL i interfejsów API wtyczki Androida do obsługi Gradle w wersji 4.1 jest teraz definiowana w zestawie interfejsów Kotlin, niezależnie od ich klas implementacji. Oznacza to, że:
- Dopuszczalność wartości null i zmienność są teraz bezpośrednio deklarowane w przypadku typów Kotlin.
- Dokumentacja generowana z tych interfejsów jest opublikowana w materiałach referencyjnych Kotlin API.
- Powierzchnia interfejsu API wtyczki Androida do obsługi Gradle jest jasno zdefiniowana, dzięki czemu rozszerzanie kompilacji Androida w przyszłości będzie mniej szkodliwe.
Ważne: jeśli korzystasz już ze skryptów kompilacji KTS lub używasz języka Kotlin w buildSrc
, może to spowodować problemy ze zgodnością źródła w przypadku niektórych błędów, które w poprzednich wersjach mogą powodować błędy w czasie działania.
Typy kolekcji, które mają być mutowane w DSL, są teraz jednolicie zdefiniowane jako:
val collection: MutableCollectionType
Oznacza to, że nie można już zapisywać w skryptach Kotlin tych elementów w niektórych kolekcjach, które wcześniej je obsługiwały:
collection = collectionTypeOf(...)
Jednak zmienianie kolekcji jest obsługiwane jednolicie, więc collection += …
i collection.add(...)
powinny teraz działać wszędzie.
Jeśli podczas uaktualniania projektu korzystającego z interfejsów Kotlin API i DSL wtyczki Androida do Gradle zauważysz problemy, zgłoś błąd.
Eksportuj zależności C/C++ z AAR
Wtyczka Androida do obsługi Gradle w wersji 4.0 umożliwia importowanie pakietów Prefab w zależnościach AAR. W AGP 4.1 można teraz eksportować biblioteki z zewnętrznej kompilacji natywnej na potrzeby projektu biblioteki Android.
Aby wyeksportować biblioteki natywne, dodaj ten fragment do bloku android
w pliku build.gradle
projektu biblioteki:
buildFeatures { prefabPublishing true }prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }
<var>myotherlibrary</var> { headers "src/main/cpp/<var>myotherlibrary</var>/include" }
}
buildFeatures { prefabPublishing = true }prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }
create("<var>myotherlibrary</var>") { headers = "src/main/cpp/<var>myotherlibrary</var>/include" }
}
W tym przykładzie biblioteki mylibrary
i myotherlibrary
z zewnętrznej kompilacji natywnej CMake zostaną spakowane do pliku AAR wygenerowanego przez kompilację, a każdy z nich wyeksportuje nagłówki z podanego katalogu do katalogów zależnych.
Uwaga: w przypadku użytkowników wtyczki Androida do obsługi Gradle w wersji 4.0 lub nowszej ustawienia konfiguracji importowania gotowych bibliotek natywnych uległy zmianie. Więcej informacji znajdziesz w informacjach o wersji 4.0.
Obsługa R8 w przypadku metadanych Kotlin
Kotlin używa niestandardowych metadanych w plikach klas Javy do identyfikowania konstrukcji języka Kotlin. R8 obsługuje teraz obsługę i modyfikowanie metadanych Kotlin, aby w pełni obsługiwać zmniejszanie bibliotek i aplikacji Kotlin za pomocą kotlin-reflect
.
Aby zachować metadane Kotlin, dodaj te reguły Keep:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
Dzięki temu R8 zachowa metadane Kotlin dla wszystkich klas, które są przechowywane bezpośrednio.
Więcej informacji znajdziesz w artykule o ograniczaniu bibliotek i aplikacji Kotlin przy użyciu funkcji Kotlin w wersji R8{:.external} w Medium.
Asercje w kompilacjach debugowania
Gdy kompilujesz aplikację do debugowania za pomocą wtyczki Androida do obsługi Gradle w wersji 4.1.0 lub nowszej, wbudowany kompilator (D8) przepisuje kod aplikacji, aby umożliwić asercje podczas kompilacji. Dzięki temu kontrole asercji są zawsze aktywne.
Zmiany w działaniu
Usunięto pamięć podręczną kompilacji wtyczki Androida do obsługi Gradle
Pamięć podręczna kompilacji AGP została usunięta w AGP 4.1. Wprowadzona w AGP 2.3, aby uzupełnić pamięć podręczną kompilacji Gradle, pamięć podręczna kompilacji AGP została w całości zastąpiona przez pamięć podręczną kompilacji Gradle w AGP 4.1. Ta zmiana nie wpływa na czas kompilacji.
Zadanie cleanBuildCache
oraz usługi android.enableBuildCache
i android.buildCacheDir
zostały wycofane i zostaną usunięte w AGP w wersji 7.0. Właściwość android.enableBuildCache
obecnie nie działa, natomiast właściwość android.buildCacheDir
i zadanie cleanBuildCache
będą działać do wersji 7.0 w przypadku usuwania zawartości pamięci podręcznej kompilacji AGP.
Znacznie zmniejszony rozmiar aplikacji korzystających z zmniejszania kodu
Począwszy od tej wersji pola klas R nie są już domyślnie zachowywane, co może znacznie zmniejszyć rozmiar plików APK w przypadku aplikacji umożliwiających zmniejszenie kodu. Nie powinno to spowodować zmiany działania, chyba że uzyskujesz dostęp do klas R przez odczucia. W takim przypadku musisz dodać reguły przechowywania dla tych klas R.
Nazwa właściwości android.namespacedRClass została zmieniona na android.nonTransitiveRClass
Nazwa flagi eksperymentalnej android.namespacedRClass
została zmieniona na android.nonTransitiveRClass
.
Ustawiona w pliku gradle.properties
flaga umożliwia zmianę przestrzeni nazw klasy R każdej biblioteki tak, aby jej klasa R zawierała tylko zasoby zadeklarowane w bibliotece, bez żadnych zależności biblioteki, zmniejszając w ten sposób rozmiar klasy R tej biblioteki.
Nazwa usługi Kotlin DSL: coreLibraryDesugaringEnabled
Opcja kompilacji DSL Kotlin coreLibraryDesugaringEnabled
została zmieniona na isCoreLibraryDesugaringEnabled
.
Więcej informacji o tej fladze znajdziesz w artykule na temat obsługi deugarowania interfejsu API Java 8 i nowszych (wtyczka do Androida Gradle w wersji 4.0.0 lub nowszej).
Właściwości wersji zostały usunięte z klasy BuildConfig w projektach biblioteki
Tylko w przypadku projektów biblioteki z wygenerowanej klasy BuildConfig
usunięto właściwości BuildConfig.VERSION_NAME
i BuildConfig.VERSION_CODE
, ponieważ te wartości statyczne nie odzwierciedlały końcowych wartości kodu wersji i nazwy aplikacji, więc wprowadzały w błąd. Dodatkowo te wartości zostały odrzucone podczas scalania plików manifestu.
W przyszłej wersji wtyczki Androida do obsługi Gradle właściwości versionName
i versionCode
też zostaną usunięte z DSL dla bibliotek.
Obecnie nie można automatycznie uzyskać dostępu do kodu ani nazwy wersji aplikacji z podprojektu biblioteki.
W przypadku modułów aplikacji bez zmian możesz nadal przypisywać wartości do versionCode
i versionName
w DSL. Te wartości zostaną zastosowane w pliku manifestu aplikacji i polach BuildConfig
.
Ustaw ścieżkę NDK
Ścieżka lokalnej instalacji NDK możesz ustawić za pomocą właściwości android.ndkPath
w pliku build.gradle
modułu.
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}
Jeśli używasz tej właściwości razem z właściwością android.ndkVersion
, ta ścieżka musi zawierać wersję NDK pasującą do android.ndkVersion
.
Zmiany działania testu jednostki bibliotecznej
Zmieniliśmy sposób kompilowania i wykonywania testów jednostek biblioteki. Testy jednostkowe biblioteki są teraz kompilowane i oparte na klasach kompilacji/środowiska wykonawczego, dzięki czemu test jednostkowy korzysta z biblioteki w taki sam sposób, w jaki robi to zewnętrzne podprojekty. Taka konfiguracja zapewnia zwykle lepsze testowanie.
W niektórych przypadkach podczas testów jednostek biblioteki, które używają wiązania danych, mogą wystąpić brakujące klasy DataBindingComponent
lub BR
. Te testy należy przenieść do testu z instrumentacją w projekcie androidTest
, ponieważ kompilowanie i uruchamianie tych klas w teście jednostkowym może zwrócić nieprawidłowe dane wyjściowe.
Wtyczka io.fabric Gradle została wycofana
Wtyczka io.fabric Gradle została wycofana i nie jest zgodna z wersją 4.1 wtyczki Androida do obsługi Gradle. Więcej informacji o wycofanym pakiecie SDK Fabric i migracji do pakietu SDK Firebase Crashlytics znajdziesz w artykule Przejście na pakiet SDK Firebase Crashlytics.