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 += …
i 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 mylibrary
i myotherlibrary
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_NAME
i BuildConfig.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 versionName
i versionCode
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 versionCode
i versionName
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.