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

Wtyczka Androida do obsługi Gradle w wersji 7.1.0 to ważna wersja, 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:

  • Problemy z duplikatami klas zgłoszone przez R8

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

7.1.2 (luty 2022)

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

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

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

7.1.1 (luty 2022)

Ta niewielka aktualizacja odpowiada wydaniu Androida Studio Bumblebee w wersji Patch 1.

Listę poprawek błędów w tej wersji znajdziesz w  poście na blogu o Android Studio Bumblebee Patch 1.

Zgodność

Wersja minimalna Wersja domyślna Uwagi
Gradle 7.2 7.2 Więcej informacji znajdziesz w sekcji Aktualizowanie Gradle.
SDK Build Tools 30.0.3 30.0.3 Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK.
NDK Nie dotyczy 21.4.7075529 Zainstaluj lub skonfiguruj inną wersję NDK.
JDK 11 11 Więcej informacji znajdziesz w artykule o ustawianiu wersji JDK.

Zadanie analizy Lint można teraz zapisywać w pamięci podręcznej

AndroidLintAnalysisTask jest teraz zgodny z pamięcią podręczną kompilacji Gradle. Jeśli włączysz pamięć podręczną kompilacji, ustawiając org.gradle.caching=true w pliku gradle.properties, zadanie analizy lint będzie w miarę możliwości pobierać dane wyjściowe z pamięci podręcznej kompilacji.

Zadanie analizy lint jest często największym wąskim gardłem podczas uruchamiania lint z wtyczką Androida do Gradle, więc włączenie pamięci podręcznej kompilacji w wielu sytuacjach przyspiesza kompilację podczas uruchamiania lint. Powinieneś zauważyć znaczną poprawę wydajności, np. jeśli masz projekt wielomodułowy i czyścisz 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 Androida z kodem C/C++ można teraz skonfigurować tak, aby odwoływał się do plików nagłówkowych i kodu biblioteki w innym module Gradle. Protokół Prefab służy do przekazywania nagłówków i bibliotek między modułami Gradle.

Wymagania

  • Moduł consuming musi mieć wartość CMake, a nie ndk-build. Obsługa ndk-build będzie wymagać przyszłej aktualizacji NDK. Moduł publikowania może mieć wartość CMake lub ndk-build.

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

android {
  buildFeatures {
    prefab true
  }
}
  • Moduł publishing musi włączyć prefabPublishing w pliku build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Moduł odbiorczy musi odwoływać się do modułu publikującego, dodając wiersz w bloku dependencies pliku build.gradle. 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ć find_package() do lokalizowania 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 natywnych odbiorców i producentów AAR za pomocą AGP znajdziesz w artykule Natywne zależności w 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 następnie 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 build.gradle najwyższego poziomu, 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 uległ zmianie. Użyj więc pliku build.gradle najwyższego poziomu i pliku settings.gradle, aby zdefiniować konfiguracje kompilacji, które mają zastosowanie do wszystkich modułów w projekcie, lub repozytoria 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 program do zmniejszania zasobów

Android Studio Bumblebee zawiera ulepszone narzędzie do zmniejszania zasobów, które pomaga zmniejszyć rozmiar aplikacji.

Obsługa aplikacji z funkcjami dynamicznymi

Domyślna implementacja narzędzia do zmniejszania rozmiaru zasobów Androida została zaktualizowana we wtyczce Androida do obsługi Gradle w wersji 7.1.0-alpha09. Nowa implementacja umożliwia zmniejszanie rozmiaru aplikacji za pomocą funkcji dynamicznych.

Eksperymentalne dalsze zmniejszanie rozmiaru aplikacji

Nowa implementacja narzędzia do zmniejszania rozmiaru 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 program do zmniejszania rozmiaru zasobów może całkowicie usuwać nieużywane zasoby plików, co dodatkowo zmniejsza rozmiar aplikacji. To zachowanie nie jest jeszcze domyślnie włączone, ale możesz je wypróbować, dodając do pliku gradle.properties projektu opcję eksperymentalną android.experimental.enableNewResourceShrinker.preciseShrinking=true.

Zgłaszaj wszelkie problemy, które napotkasz w nowym narzędziu do zmniejszania rozmiaru zasobów lub w eksperymentalnej fladze. Aby zdiagnozować problemy lub tymczasowo je obejść, możesz wrócić do poprzedniej implementacji, dodając android.enableNewResourceShrinker=false do pliku gradle.properties projektu. Nowy kompresor zastępuje nieużywane zasoby oparte na plikach nieco innymi minimalnymi plikami niż poprzedni kompresor zasobów, ale nie powinno to mieć wpływu na działanie aplikacji.

Starsza implementacja zostanie usunięta we wtyczce Androida do obsługi Gradle w wersji 8.0.0.

Publikowanie wariantów kompilacji

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

Publikowanie pliku JAR Javadoc

AGP 7.1.0 i nowsze umożliwiają generowanie dokumentacji Javadoc ze źródeł Java i Kotlin oraz publikowanie plików JAR dokumentacji Javadoc oprócz plików AAR w przypadku projektów bibliotek. Dokumentacja Javadoc jest dodawana do plików POM i Gradle Module Metadata{:.external}. Aby włączyć tę funkcję, dodaj withJavadocJar()singleVariant lub multipleVariants bloku publikowania. Więcej informacji znajdziesz w przykładowym kodzie opcji publikowania.

Publikowanie plików JAR ze źródłami

AGP 7.1.0 i nowsze umożliwiają publikowanie plików JAR z kodem źródłowym w językach Java i Kotlin oprócz plików AAR w przypadku projektów bibliotek. Źródła zostaną dodane do plików POM i Gradle Module Metadata{:.external}. Możesz włączyć tę funkcję, dodając withSourcesJar()singleVariant lub multipleVariants bloku publikowania. Więcej informacji znajdziesz w przykładowym kodzie opcji publikowania.

Zmiana semantyczna bloku lintowania

Wszystkie metody lint, które zastępują podany poziom ważności problemu – enable, disable/ignore, informational, warning, error, fatal – uwzględniają teraz kolejność konfiguracji. Na przykład ustawienie problemu jako krytycznego w finalizeDsl() zastępuje teraz wyłączenie go w głównym DSL. Więcej informacji znajdziesz w lint{} dokumentacji dotyczącej bloków i punktów rozszerzeń oraz przepływu kompilacji Androida.

Usunięto interfejsy API AGP, od których zależy wtyczka Gradle Safe Args. 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. W międzyczasie możesz używać AGP 7.1 z wersją Navigation Safe Args w postaci migawki, czyli Navigation 2.5.0-SNAPSHOT. Aby użyć kompilacji zrzutu, postępuj zgodnie z instrukcjami dotyczącymi zrzutu z identyfikatorem kompilacji 8054565.

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

Wyłączanie automatycznego tworzenia komponentów

Od AGP 8.0 automatyczne tworzenie komponentów będzie domyślnie wyłączone. Obecnie AGP 7.1 automatycznie tworzy komponent dla każdego wariantu kompilacji, który ma taką samą nazwę jak wariant kompilacji, oraz komponent all, który zawiera wszystkie warianty kompilacji. Automatyczne tworzenie komponentów 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

AGP 7.1 jest niezgodny z wtyczką 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 firebase-perf i chcesz uaktualnić AGP do wersji 7.1, musisz to zrobić ręcznie.

Znane problemy

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

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 w celu obsługi wstrzykiwania zależności podczas przeprowadzania testów jednostkowych.

Ten problem zostanie rozwiązany w wersji 7.1.1. Więcej informacji znajdziesz w tym zgłoszeniu.