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

Zgodność

Minimalna wersja Wersja domyślna Uwagi
Gradle 6.5 Nie dotyczy Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilowania pakietu SDK 29.0.2 29.0.2 Zainstaluj lub skonfiguruj narzędzia do kompilowania pakietu SDK.
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 Gradle do Androida zawiera te nowe funkcje:

Obsługa DSL w Kotlin Script

Aby ulepszyć proces edycji dla użytkowników skryptu kompilacji w Kotlinie, definicje języka DSL i interfejsów API w pliku Android Gradle Plugin 4.1 zostały teraz przeniesione do zestawu interfejsów Kotlina, oddzielnie od klas implementacji. Oznacza to, że:

  • Możliwość przypisania wartości null i zmienność są teraz wyraźnie deklarowane w typach Kotlina.
  • Dokumentacja wygenerowana na podstawie tych interfejsów jest publikowana w dokumentacji interfejsu API Kotlina.
  • Interfejs API wtyczki Androida do obsługi Gradle jest wyraźnie zdefiniowany, aby w przyszłości ułatwić rozszerzanie kompilacji Androida.

Ważne: jeśli używasz już skryptów kompilacji KTS lub Kotlina w buildSrc, może to spowodować niespójność źródła w przypadku niektórych błędów, które w poprzednich wersjach byłyby widoczne jako błędy czasu wykonywania.

Typy kolekcji, które mają być modyfikowane w języku DSL, są teraz jednolicie definiowane jako:

val collection: MutableCollectionType

Oznacza to, że w przypadku niektórych kolekcji, które wcześniej obsługiwały te funkcje, nie można już w skryptach Kotlina pisać w ten sposób:

collection = collectionTypeOf(...)

Zmiana zbioru jest jednak obsługiwana w podobny sposób, więc funkcje collection += …collection.add(...) powinny teraz działać wszędzie.

Jeśli podczas uaktualniania projektu, który korzysta z interfejsów API i języka DSL w pliku dodatku Kotlin dla Androida Gradle, zauważysz jakieś 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 wersji AGP 4.1 można eksportować biblioteki z zewnętrznego kompilowania natywnego w pliku AAR w ramach projektu biblioteki Androida.

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

Uwaga: w przypadku użytkowników wtyczki Android Gradle w wersji 4.0 lub nowszej zmieniły się ustawienia konfiguracji importowania wstępnie utworzonych bibliotek natywnych. Więcej informacji znajdziesz w informacjach o wersji 4.0.

Obsługa metadanych Kotlina w wersji R8

Kotlin używa niestandardowych metadanych w plikach klas Java do identyfikowania konstrukcji języka Kotlin. R8 obsługuje teraz utrzymywanie i przepisywanie metadanych Kotlina, aby w pełni obsługiwać skracanie bibliotek i aplikacji Kotlin za pomocą kotlin-reflect.

Aby zachować metadane Kotlina, dodaj te reguły zachowania:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

Spowoduje to, że R8 będzie przechowywać metadane Kotlina dla wszystkich klas, które są przechowywane bezpośrednio.

Więcej informacji znajdziesz w artykule Krótsze biblioteki i aplikacje Kotlina za pomocą funkcji Kotlina do odbicia lustrzanego w R8{:.external} na Medium.

Asercje w kompilacjach do debugowania

Gdy kompilujesz wersję debugową aplikacji za pomocą wtyczki Android Gradle w wersji 4.1.0 lub nowszej, wbudowany kompilator (D8) przepisze kod aplikacji, aby umożliwić sprawdzanie asercji w czasie kompilacji. Dzięki temu zawsze będziesz mieć aktywne sprawdzanie asercji.

Zmiany w zachowaniu

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

Pamięć podręczna kompilacji AGP została usunięta w wersji 4.1. W wersji AGP 2.3 dodaliśmy pamięć podręczną kompilacji AGP, aby uzupełnić pamięć podręczną kompilacji Gradle. W wersji AGP 4.1 została ona całkowicie zastąpiona pamięcią podręczną kompilacji Gradle. Ta zmiana nie ma wpływu na czas kompilacji.

Zadanie cleanBuildCache oraz właściwości android.enableBuildCache i android.buildCacheDir są wycofane i zostaną usunięte w wersji APG 7.0. Właściwość android.enableBuildCache nie ma obecnie żadnego wpływu, natomiast właściwość android.buildCacheDir i zadanie cleanBuildCache będą działać do wersji AGP 7.0 w celu usunięcia zawartości pamięci podręcznej kompilacji AGP.

znaczne zmniejszenie rozmiaru aplikacji korzystających z kurczenia kodu;

Począwszy od tej wersji pola z klas R nie są już domyślnie przechowywane, co może skutkować znacznym zmniejszeniem rozmiaru pliku APK w przypadku aplikacji, które umożliwiają kompresję kodu. Nie powinno to powodować zmiany zachowania, chyba że uzyskujesz dostęp do klas R za pomocą odbicia lustrzanego. 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.

Flaga eksperymentalna android.namespacedRClass została przemianowana na android.nonTransitiveRClass.

Ten parametr ustawiony w pliku gradle.properties umożliwia stosowanie nazw dla każdej klasy R biblioteki, tak aby zawierała ona tylko zasoby zadeklarowane w samej bibliotece, a nie te z jej zależności, co zmniejsza rozmiar klasy R tej biblioteki.

Kotlin DSL: zmieniono nazwę funkcji coreLibraryDesugaringEnabled

Opcja kompilacji Kotlin DSL coreLibraryDesugaringEnabled została zmieniona na isCoreLibraryDesugaringEnabled. Więcej informacji o tym parametrze znajdziesz w artykule Obsługa desugarowania interfejsu API w Java 8+ (Android Gradle Plugin 4.0.0 lub nowszy).

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

W przypadku projektów bibliotek właściwości BuildConfig.VERSION_NAMEBuildConfig.VERSION_CODE zostały usunięte z wygenerowanej klasy BuildConfig, ponieważ te wartości statyczne nie odzwierciedlały ostatecznych wartości kodu wersji i nazwy aplikacji, a zatem były wprowadzające 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ą również usunięte z języka DSL dla bibliotek. Obecnie nie ma możliwości automatycznego uzyskania kodu lub nazwy wersji aplikacji z poziomu podprojektu biblioteki.

W przypadku modułów aplikacji nie ma żadnych zmian. Nadal możesz przypisywać wartości parametrom versionCodeversionName w DSL. Te wartości zostaną przeniesione 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 właściwością android.ndkVersion, ścieżka musi zawierać wersję NDK odpowiadającą wartości android.ndkVersion.

Zmiany zachowania testów jednostkowych biblioteki

Zmieniliśmy sposób kompilowania i uruchamiania testów jednostkowych bibliotek. Testy jednostkowe biblioteki są teraz kompilowane i uruchamiane w klasach kompilacji/czasu wykonywania biblioteki, co powoduje, że test jednostkowy korzysta z biblioteki w taki sam sposób jak zewnętrzne podprojekty. Taka konfiguracja zwykle zapewnia lepsze testowanie.

W niektórych przypadkach testy jednostek biblioteki, które korzystają z wiązania danych, mogą napotkać brakujące klasy DataBindingComponent lub BR. Testy te należy przekształcić w testy z instrumentacją w projekcie androidTest, ponieważ kompilacja i uruchamianie tych klas w ramach testu jednostkowego mogą spowodować nieprawidłowy wynik.

Wycofanie wtyczki io.fabric do Gradle

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