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:

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.