Wtyczka Androida do obsługi Gradle 7.1.0 (styczeń 2022 r.)

Wtyczka Androida do obsługi Gradle w wersji 7.1.0 to ważna aktualizacja, która zawiera wiele nowych funkcji i ulepszeń.

7.1.3 (kwiecień 2022 r.)

Ta niewielka aktualizacja zawiera następujące poprawki błędów:

  • Zduplikowane problemy z zajęciami zgłoszone przez R8

Pełną listę poprawek błędów zawartych w tej wersji znajdziesz w  poście na blogu Android Studio o Bumblebee Patch 3.

7.1.2 (luty 2022 r.)

Ta niewielka aktualizacja zawiera następujące poprawki błędów:

  • Wtyczka Androida do obsługi Gradle 7.1.0-rc01 nie wykonuje przekształceń kodu bajtowego ASM podczas testów jednostkowych
  • Synchronizacja Gradle kończy się niepowodzeniem z komunikatem „Nie udało się wczytać klasy 'com.android.build.api.extension.AndroidComponentsExtension'”.
  • Niektórych nowych bloków DSL nie można używać w Groovy DSL w Android Gradle Plugin w wersji 7.0.0
  • AGP 7.1 nowy interfejs API do publikowania: utworzony plik javadoc jar nie jest podpisywany
  • ClassesDataSourceCache powinien używać najnowszej wersji Asm
  • Android Studio BumbleBee nie zawsze wdraża najnowsze zmiany

Pełną listę poprawek błędów zawartych w tej wersji znajdziesz w artykule Android Studio Bumblebee Patch 2 w postach na blogu.

7.1.1 (luty 2022 r.)

Ta drobna aktualizacja odpowiada wersji Android Studio Bumblebee Patch 1.

Aby zobaczyć listę błędów naprawionych w tej wersji, przeczytaj ten post na blogu.

Zgodność

Minimalna wersja Wersja domyślna Uwagi
Gradle 7.2 7.2 Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilowania pakietu SDK 30.0.3 30.0.3 Zainstaluj lub skonfiguruj narzędzia do kompilowania pakietu SDK.
NDK Nie dotyczy 21.4.7075529 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 11 11 Więcej informacji znajdziesz w artykule Ustawianie wersji JDK.

Zadanie analizy Lint może być teraz przechowywane w pamięci podręcznej

Usługa AndroidLintAnalysisTask jest teraz zgodna z pamięcią podręczną kompilacji Gradle. Jeśli włączysz pamięć podręczną kompilacji, ustawiając wartość org.gradle.caching=true w pliku gradle.properties, zadanie analizy błędów będzie pobierać dane z pamięci podręcznej kompilacji, gdy tylko będzie to możliwe.

Największym ograniczeniem podczas uruchamiania linta za pomocą wtyczki Gradle dla Androida jest często zadanie analizy linta, dlatego w wielu sytuacjach włączenie pamięci podręcznej kompilacji zwiększa szybkość kompilacji podczas uruchamiania linta. Powinieneś zauważyć znaczną poprawę wydajności, np. jeśli masz projekt wielomodułowy i oczyszczasz katalog kompilacji przed uruchomieniem lint na serwerze CI.

moduły C/C++ mogą teraz odwoływać się do innych modułów C/C++ w tym samym projekcie;

Moduł Gradle na Androida z kodem C/C++ może być teraz skonfigurowany tak, aby odwoływał się do plików nagłówków i kodu biblioteki w innym module Gradle. Protokół Prefab służy do przesyłania nagłówków i bibliotek między modułami Gradle.

Wymagania

  • Moduł korzystający musi być CMake, a nie ndk-build. Obsługa ndk-build będzie wymagać przyszłej aktualizacji NDK. Moduł publikowania może być CMake lub ndk-build.

  • Moduł przetwarzający musi włączyć prefab w pliku build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • Moduł publikowania musi włączyć prefabPublishing w pliku build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Moduł korzystający musi odwoływać się do modułu publikującego przez dodanie wiersza w pliku build.gradle w bloku dependencies. Na przykład:
dependencies {
  implementation project(':mylibrary')
}
  • Moduł publikowania musi udostępniać pakiet za pomocą sekcji prefab. Na przykład:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • Plik CMakeLists.txt modułu korzystającego może używać elementu find_package() do znajdowania pakietu opublikowanego przez moduł produkujący. Na przykład:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

Więcej informacji o konfigurowaniu obsługiwanych i wytwarzanych natywnych interfejsów AAR za pomocą interfejsu AGP znajdziesz w artykule Natywnych zależności w interfejsie AGP.

Ustawienia repozytorium w pliku settings.gradle

Gdy w Android Studio Bumblebee utworzysz nowy projekt, plik najwyższego poziomu build.gradle będzie zawierać blok plugins, a zaraz po nim kod do czyszczenia katalogu kompilacji:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

Ustawienia repozytorium, które wcześniej znajdowały się w pliku najwyższego poziomu build.gradle, są teraz w pliku settings.gradle:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

Plik build.gradle na poziomie modułu nie został zmieniony. Dlatego użyj najwyższego poziomu pliku build.gradle i pliku settings.gradle, aby zdefiniować konfiguracje kompilacji, które mają zastosowanie do wszystkich modułów w projekcie, lub repozytoriów i zależności, które mają zastosowanie do samego Gradle. Użyj pliku build.gradle na poziomie modułu, aby zdefiniować konfiguracje kompilacji, które są specyficzne dla danego modułu w projekcie.

Ulepszony kompresor zasobów

Android Studio Bumblebee zawiera ulepszony kompresor zasobów, który pomaga zmniejszyć rozmiar aplikacji.

Obsługa aplikacji z funkcjami dynamicznymi

Domyślna implementacja kompresora zasobów Androida została zaktualizowana w wersji 7.1.0-alpha09 wtyczki Androida do obsługi Gradle. Nowa implementacja umożliwia zmniejszanie aplikacji z funkcjami dynamicznymi.

Eksperymentalne dalsze zmniejszanie rozmiaru aplikacji

Nowa implementacja narzędzia do kompresji zasobów może jeszcze bardziej zmniejszyć rozmiar skompresowanej aplikacji, modyfikując tabelę zasobów w celu usunięcia nieużywanych zasobów wartości i odwołań do nieużywanych zasobów plików. Nowy moduł do usuwania zasobów może całkowicie usunąć nieużywane zasoby plików, co jeszcze bardziej zmniejszy rozmiar aplikacji. Ta funkcja nie jest jeszcze domyślnie włączona, ale możesz ją wypróbować, dodając opcję eksperymentalną android.experimental.enableNewResourceShrinker.preciseShrinking=true do pliku gradle.properties projektu.

Zgłaszaj wszelkie problemy z nowym narzędziem do kompresowania zasobów lub z flagą eksperymentalną. Aby ułatwić diagnozowanie problemów lub jako tymczasowe obejście, możesz przełączyć się z powrotem na poprzednią implementację, dodając android.enableNewResourceShrinker=false do gradle.properties projektu. Nowy program do kompresowania zastępuje nieużywane zasoby oparte na plikach nieco innymi minimalnymi plikami niż poprzedni program do kompresowania zasobów, ale nie powinno to mieć wpływu na czas wykonywania.

Stara implementacja zostanie usunięta w wersji 8.0.0 wtyczki Androida do obsługi Gradle.

Budowanie wariantów publikowania

Wtyczka Androida do obsługi Gradle w wersji 7.1.0 lub nowszej umożliwia konfigurowanie wariantów kompilacji, które mają zostać opublikowane w repozytorium Apache Maven. AGP tworzy komponent z jednym lub wieloma wariantami kompilacji na podstawie nowego języka publikowania DSL, którego możesz użyć do dostosowania publikacji do repozytorium Maven. W porównaniu z poprzednimi wersjami pozwala to też uniknąć niepotrzebnej pracy, ponieważ domyślnie nie są tworzone żadne komponenty. Więcej informacji znajdziesz w przykładowym kodzie publikowania.

Publikowanie pliku JAR Javadoc

Wersja AGP 7.1.0 i nowsze umożliwia generowanie Javadoca ze źródeł Java i Kotlin oraz publikowanie plików Javadoc JAR oprócz plików AAR dla projektów bibliotek. Javadoc jest dodawany do plików POM i metadanych modułu Gradle{:.external}. Aby włączyć tę funkcję, dodaj withJavadocJar() w bloku publikowania singleVariant lub multipleVariants. Więcej informacji znajdziesz w przykładowym kodzie opcji publikacji.

Publikowanie pliku JAR ze źródłami

AGP w wersji 7.1.0 lub nowszej umożliwia publikowanie plików źródłowych JAR w języku Java i Kotlin, a także plików AAR w przypadku projektów bibliotek. Źródła są dodawane do plików POM i metadanych modułu Gradle{:.external}. Możesz włączyć tę funkcję, dodając withSourcesJar() w bloku publikowania singleVariant lub multipleVariants. Więcej informacji znajdziesz w przykładowym kodzie opcji publikacji.

Zmiana semantyczna bloku lint

Wszystkie metody lint, które zastępują dany poziom powagi problemu (enable, disable/ignore, informational, warning, error, fatal), teraz przestrzegają kolejności konfiguracji. Na przykład ustawienie problemu jako krytycznego w finalizeDsl() zastępuje teraz wyłączenie w głównym DSL. Więcej informacji znajdziesz w dokumentacji dotyczącej bloków lint{} oraz w artykule Proces kompilacji Androida i punkty rozszerzenia.

Usunięto interfejsy AGP, od których zależy wtyczka Navigation Safe Args Gradle. AGP 7.1 nie działa z wersjami Navigation Safe Args 2.4.0-rc1 ani 2.4.0, ale będzie działać z wersjami 2.5.0-alpha01 i 2.4.1. Tymczasem jako obejście problemu możesz użyć AGP 7.1 z kompilacją snapshota Argumentów Bezpiecznej Nawigacji Navigation 2.5.0-SNAPSHOT. Aby korzystać z kompilacji zrzutu, postępuj zgodnie z instrukcjami dotyczącymi zrzutu dla kompilacji o identyfikatorze #8054565.

Dodatkowo wersje 2.4.1 i 2.5.0 biblioteki Navigation Safe Args nie będą już działać z AGP 4.2. Aby używać tych wersji biblioteki Safe Args, musisz użyć wersji 7.0 lub nowszej.

Wyłączanie automatycznego tworzenia komponentów

Od wersji 8.0 AGP automatyczne tworzenie komponentów będzie domyślnie wyłączone. Obecnie AGP 7.1 automatycznie tworzy komponent dla każdej wersji kompilacji, który ma tę samą nazwę co wersja kompilacji, oraz komponent all, który zawiera wszystkie wersje kompilacji. Tworzenie tego komponentu automatycznego zostanie wyłączone. Aby przejść na nowe działanie, musisz ręcznie wyłączyć automatyczne tworzenie komponentów, ustawiając wartość android.disableAutomaticComponentCreation na true.. Więcej informacji znajdziesz w artykule Korzystanie z wtyczki Maven Publish.

Zgodność z Monitorowaniem wydajności Firebase

Wersja AGP 7.1 jest niezgodna z pluginem Gradle do monitorowania wydajności Firebase w wersji 1.4.0 lub starszej. Asystent uaktualniania AGP nie zaktualizuje automatycznie wtyczki do wersji 1.4.1, więc jeśli używasz wersji firebase-perf i chcesz uaktualnić AGP do wersji 7.1, musisz wykonać to uaktualnienie ręcznie.

Znane problemy

W tej sekcji opisano znane problemy występujące w wersji 7.1.0 wtyczki Androida do obsługi Gradle.

Problemy z testowaniem jednostkowym projektu aplikacji, który korzysta z wtyczki Hilt

Ścieżka klas testów jednostkowych zawiera nieinstrumentowane klasy aplikacji, co oznacza, że Hilt nie instrumentuje klas aplikacji, aby obsługiwać wstrzykiwanie zależności podczas wykonywania testów jednostkowych.

Ten problem zostanie rozwiązany w wersji 7.1.1. Zobacz problem #213534628.