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 sekcji Aktualizowanie Gradle. |
SDK Build Tools | 29.0.2 | 29.0.2 | Zainstaluj lub skonfiguruj narzędzia do kompilacji 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 Androida do obsługi Gradle zawiera te nowe funkcje:
Obsługa Kotlin Script DSL
Aby ułatwić użytkownikom skryptów kompilacji w Kotlinie edytowanie, interfejs DSL i interfejsy API wtyczki Androida do 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 czasu 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 to obsługiwały, nie można już pisać w skryptach w języku Kotlin:
collection = collectionTypeOf(...)
Modyfikowanie kolekcji jest jednak obsługiwane jednolicie, więc collection += …
i collection.add(...)
powinny teraz działać wszędzie.
Jeśli podczas uaktualniania projektu, który korzysta z interfejsów API i DSL Kotlin wtyczki Android 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 mylibrary
i myotherlibrary
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 będzie przechowywać 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 tworzysz 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 AGP została usunięta w AGP 4.1. Wprowadzona wcześniej w AGP 2.3 jako uzupełnienie pamięci podręcznej kompilacji Gradle, pamięć podręczna kompilacji AGP została całkowicie zastąpiona przez pamięć podręczną kompilacji Gradle w AGP 4.1. Ta zmiana nie ma wpływu na czas kompilacji.
Zadanie cleanBuildCache
oraz właściwości android.enableBuildCache
i android.buildCacheDir
zostały wycofane i zostaną usunięte w AGP 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, aby usuwać zawartość istniejącej pamięci podręcznej kompilacji AGP.
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 konieczne jest dodanie reguł 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 parametrze 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_NAME
i BuildConfig.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 versionName
i versionCode
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 versionCode
i versionName
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 przestarzała 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.