Wtyczka Androida do obsługi Gradle w wersji 4.1.0 (sierpień 2020 r.)

Zgodność

Wersja minimalna Wersja domyślna Uwagi
Gradle 6.5 Nie dotyczy Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilacji pakietu SDK 29.0.2 29.0.2 Zainstaluj lub skonfiguruj narzędzia SDK Build Tools.
NDK Nie dotyczy 21.1.6352462 Zainstaluj lub skonfiguruj inną wersję NDK.

<p>This version of the Android plugin requires the following:</p>
<ul>
  <li>
    <p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
    To learn more, read the section about <a href="#updating-gradle">updating
    Gradle</a>.</p>
  </li>
  <li>
    <p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
    29.0.2</a> or higher.</p>
  </li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>

Nowe funkcje

Ta wersja wtyczki Androida do obsługi Gradle zawiera te nowe funkcje:

Obsługa Kotlin Script DSL

Aby ułatwić edytowanie skryptów kompilacji w języku Kotlin, interfejs DSL i interfejsy API wtyczki Androida do obsługi Gradle w wersji 4.1 są teraz zdefiniowane w zestawie interfejsów Kotlin oddzielnie od klas implementacji. Oznacza to, że:

  • W przypadku typów w Kotlinie można teraz jawnie zadeklarować, czy dopuszczają one wartość null i czy są modyfikowalne.
  • Dokumentacja wygenerowana na podstawie tych interfejsów jest publikowana w dokumentacji interfejsu API języka Kotlin.
  • Powierzchnia interfejsu API wtyczki Androida do obsługi Gradle jest jasno zdefiniowana, aby w przyszłości rozszerzanie kompilacji Androida było mniej podatne na błędy.

Ważne: jeśli masz już skrypty kompilacji KTS lub używasz języka Kotlin w buildSrc, może to spowodować przerwanie zgodności kodu źródłowego w przypadku niektórych błędów, które w poprzednich wersjach objawiały się jako błędy w czasie działania.

Typy kolekcji, które mają być modyfikowane w DSL, są teraz jednolicie zdefiniowane jako:

val collection: MutableCollectionType

Oznacza to, że w przypadku niektórych kolekcji, które wcześniej obsługiwały ten język, nie można już pisać w skryptach w języku Kotlin:

collection = collectionTypeOf(...)

Modyfikowanie kolekcji jest jednak obsługiwane jednolicie, więc collection += …collection.add(...) powinny teraz działać wszędzie.

Jeśli podczas uaktualniania projektu, który korzysta z interfejsów API Kotlin i DSL wtyczki Androida do obsługi Gradle, napotkasz problemy, zgłoś błąd.

Eksportowanie zależności C/C++ z plików 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 w formacie AAR do projektu biblioteki Androida.

Aby wyeksportować biblioteki natywne, dodaj ten kod 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 mylibrarymyotherlibrary z zewnętrznej kompilacji natywnej ndk-build lub CMake zostaną spakowane w pliku AAR wygenerowanym przez kompilację, a każda z nich wyeksportuje nagłówki z określonego katalogu do swoich zależności.

Uwaga: w przypadku użytkowników wtyczki Androida do obsługi Gradle w wersji 4.0 lub nowszej ustawienia konfiguracji importowania wstępnie skompilowanych bibliotek natywnych uległy zmianie. Więcej informacji znajdziesz w informacjach o wersji 4.0.

Obsługa metadanych Kotlin w R8

Kotlin używa niestandardowych metadanych w plikach klas Java do identyfikowania konstrukcji języka Kotlin. R8 obsługuje teraz zachowywanie i przepisywanie 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 zachowywania:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

Spowoduje to, że R8 zachowa metadane Kotlin dla wszystkich klas, które są bezpośrednio zachowywane.

Więcej informacji znajdziesz w artykule Shrinking Kotlin libraries and applications using Kotlin reflection with R8{:.external} na Medium.

Asercje w kompilacjach do debugowania

Gdy kompilujesz wersję debugowania aplikacji za pomocą wtyczki Androida do obsługi Gradle w wersji 4.1.0 lub nowszej, wbudowany kompilator (D8) przepisuje kod aplikacji, aby włączyć asercje w czasie kompilacji. Dzięki temu zawsze masz aktywne sprawdzanie asercji.

Zmiany w działaniu

Usunięto pamięć podręczną kompilacji wtyczki Androida do obsługi Gradle

Pamięć podręczna kompilacji wtyczki Androida do obsługi Gradle została usunięta we wtyczce Androida do obsługi Gradle 4.1. Wprowadzona wcześniej we wtyczce Androida do obsługi Gradle 2.3 jako uzupełnienie pamięci podręcznej kompilacji Gradle, pamięć podręczna kompilacji wtyczki Androida do obsługi Gradle została we wtyczce Androida do obsługi Gradle 4.1 całkowicie zastąpiona przez pamięć podręczną kompilacji Gradle. Ta zmiana nie wpływa na czas kompilacji.

Zadanie cleanBuildCache oraz właściwości android.enableBuildCacheandroid.buildCacheDir zostały wycofane i zostaną usunięte we wtyczce Androida do obsługi Gradle 7.0. Właściwość android.enableBuildCache obecnie nie ma wpływu na działanie wtyczki, natomiast właściwość android.buildCacheDir i zadanie cleanBuildCache będą działać do czasu wprowadzenia wtyczki Androida do obsługi Gradle 7.0, aby usuwać istniejącą zawartość pamięci podręcznej kompilacji wtyczki Androida do obsługi Gradle.

Znaczne zmniejszenie rozmiaru aplikacji korzystających ze zmniejszania kodu

Począwszy od tej wersji pola z klas R nie są już domyślnie zachowywane, co może znacznie zmniejszyć rozmiar pliku APK w przypadku aplikacji, które umożliwiają zmniejszanie kodu. Nie powinno to spowodować zmiany w działaniu, chyba że uzyskujesz dostęp do klas R za pomocą odbicia. W takim przypadku musisz dodać reguły zachowywania dla tych klas R.

Właściwość android.namespacedRClass została zmieniona na android.nonTransitiveRClass

Flaga eksperymentalna android.namespacedRClass nosi teraz nazwę android.nonTransitiveRClass.

Ustawiona w pliku gradle.properties flaga włącza przestrzenie nazw dla klasy R każdej biblioteki, dzięki czemu zawiera ona tylko zasoby zadeklarowane w samej bibliotece, a nie w jej zależnościach. Zmniejsza to rozmiar klasy R w tej bibliotece.

Kotlin DSL: zmiana nazwy coreLibraryDesugaringEnabled

Opcja kompilacji Kotlin DSL coreLibraryDesugaringEnabled została zmieniona na isCoreLibraryDesugaringEnabled. Więcej informacji o tym tagu znajdziesz w artykule Obsługa usuwania cukru z interfejsów API Java 8+ (wtyczka Androida do Gradle w wersji 4.0.0 i nowszej).

Właściwości wersji usunięte z klasy BuildConfig w projektach bibliotek

W przypadku projektów biblioteki usunęliśmy właściwości BuildConfig.VERSION_NAMEBuildConfig.VERSION_CODE z wygenerowanej klasy BuildConfig, ponieważ te statyczne wartości nie odzwierciedlały ostatecznych wartości kodu i nazwy wersji aplikacji, a tym samym wprowadzały w błąd. Dodatkowo te wartości zostały odrzucone podczas scalania pliku manifestu.

W przyszłej wersji wtyczki Androida do obsługi Gradle właściwości versionNameversionCode zostaną też usunięte z DSL bibliotek. Obecnie nie ma możliwości automatycznego uzyskania dostępu do kodu lub nazwy wersji aplikacji z podprojektu biblioteki.

W przypadku modułów aplikacji nie ma zmian. Nadal możesz przypisywać wartości do parametrów versionCodeversionName w DSL. Te wartości będą propagowane do pliku manifestu aplikacji i pól BuildConfig.

Ustawianie ścieżki NDK

Ścieżkę do 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 android.ndkVersion, ścieżka musi zawierać wersję NDK zgodną z android.ndkVersion.

Zmiany w działaniu testów jednostkowych biblioteki

Zmieniliśmy sposób kompilowania i uruchamiania testów jednostkowych biblioteki. Testy jednostkowe biblioteki są teraz kompilowane i uruchamiane w odniesieniu do klas kompilacji/środowiska wykonawczego samej biblioteki, dzięki czemu test jednostkowy korzysta z biblioteki w taki sam sposób jak zewnętrzne podprojekty. Ta konfiguracja zwykle zapewnia lepsze testowanie.

W niektórych przypadkach testy jednostkowe biblioteki, które korzystają z powiązania danych, mogą napotkać brakujące klasy DataBindingComponent lub BR. Te testy należy przenieść do testu z instrumentacją w projekcie androidTest, ponieważ kompilowanie i uruchamianie ich w testach jednostkowych może dawać nieprawidłowe wyniki.

Wycofanie wtyczki Gradle io.fabric

Wtyczka Gradle io.fabric jest wycofana i nie jest zgodna z wersją 4.1 wtyczki Androida do obsługi Gradle. Więcej informacji o wycofanym pakiecie SDK Fabric i przechodzeniu na pakiet SDK Firebase Crashlytics znajdziesz w artykule Przejście na pakiet SDK Firebase Crashlytics.