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

Wtyczka Androida do obsługi Gradle w wersji 7.1.0 to duża wersja, która zawiera wiele nowych funkcji i udoskonaleń.

7.1.3 (kwiecień 2022 r.)

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

  • Zduplikowane problemy dotyczące zajęć zgłoszone przez R8

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

7.1.2 (luty 2022 r.)

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

  • Wtyczka Androida Gradle 7.1.0-rc01 nie przeprowadza przekształcenia kodu bajtowego ASM podczas testów jednostkowych
  • Synchronizacja Gradle kończy się niepowodzeniem i wyświetlany jest komunikat „Nie można wczytać klasy „com.android.build.api.extension.AndroidKomponentsExtension”.
  • Niektórych nowych bloków DSL nie można używać z DSL Groovy we wtyczce Androida Gradle 7.0.0
  • Nowy interfejs API publikowania AGP 7.1: utworzony plik jar dokumentu 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 wprowadzonych w tej wersji znajdziesz w poście na blogu w sekcji Android Studio Bumblebee Patch 2.

7.1.1 (luty 2022 r.)

Ta drobna aktualizacja odpowiada opublikowaniu poprawki 1 w Android Studio Bumblebee.

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

Zgodność

Wersja minimalna Wersja domyślna
Gradle 7.2 7.2
Narzędzia do kompilacji SDK 30,0.3 30,0.3
Zestaw NDK Nie dotyczy 21.4.7075529
JDK 11 11

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

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

Zadanie analizy linta jest często największym wąskim gardłem podczas uruchamiania lint za pomocą wtyczki Androida do obsługi Gradle, więc włączenie pamięci podręcznej kompilacji w wielu sytuacjach poprawia szybkość kompilacji. Wydajność powinna być zauważalna, jeśli na przykład masz projekt składający się z wielu modułów i wyczyścisz katalog kompilacji, zanim uruchomisz 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żna teraz skonfigurować tak, aby odwoływał się do plików nagłówka 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ł korzystania musi mieć wartość CMake, a nie ndk-build. Obsługa kompilacji ndk będzie wymagać w przyszłości aktualizacji NDK. Moduł publikowania może mieć wartość CMake lub ndk-build.

  • Moduł korzystania musi włączyć funkcję prefab w pliku build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • Moduł publikowania musi włączyć ustawienie prefabPublishing w pliku build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Moduł korzystający musi odwoływać się do modułu publikowania, dodając wiersz w bloku dependencies pliku build.gradle. Na przykład:
dependencies {
  implementation project(':mylibrary')
}
  • Moduł publishing 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 wykorzystania może użyć pola find_package() do zlokalizowania pakietu opublikowanego przez moduł produkcyjny. Na przykład:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
  • Dla całej aplikacji musi istnieć 1 STL. Na przykład zarówno zużywanie, jak i publikowanie modułów może korzystać z udostępnianego formatu STL w języku C++.
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

Dalsze wyjaśnienia dotyczące konfigurowania natywnych konsumentów i producentów AAR z AGP znajdziesz w sekcji Natywne zależności z AGP.

Ustawienia repozytorium w settings.gradle pliku

Po utworzeniu nowego projektu w Android Studio Bumblebee plik build.gradle najwyższego poziomu zawiera blok plugins, po którym następuje 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, znajdują się 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 pliku build.gradle najwyższego poziomu i pliku settings.gradle, aby zdefiniować konfiguracje kompilacji, które mają zastosowanie do wszystkich modułów w Twoim projekcie, lub repozytoriów i zależności, które mają zastosowanie do samej Gradle. Użyj pliku build.gradle na poziomie modułu, aby zdefiniować konfiguracje kompilacji specyficzne dla danego modułu w projekcie.

Ulepszone ograniczanie zasobów

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

Obsługa aplikacji z funkcjami dynamicznymi

Domyślna implementacja redukcji zasobów Androida we wtyczce Androida do obsługi Gradle w wersji 7.1.0-alfa09 została zaktualizowana. Nowa implementacja obsługuje zmniejszanie aplikacji z funkcjami dynamicznymi.

Dalsze zmniejszania rozmiaru aplikacji w ramach eksperymentu

Nowa implementacja skracania zasobów może jeszcze bardziej zmniejszyć rozmiar zmniejszonej aplikacji przez zmodyfikowanie tabeli zasobów w celu usunięcia nieużywanych zasobów wartości i odwołań do nieużywanych zasobów plików. Nowy shinker zasobów może całkowicie usunąć nieużywane zasoby plików, zmniejszając w ten sposób rozmiar aplikacji. To zachowanie nie jest jeszcze włączone domyślnie, ale możesz je wypróbować, dodając opcję eksperymentalną android.experimental.enableNewResourceShrinker.preciseShrinking=true do pliku gradle.properties projektu.

Zgłoś wszelkie problemy z nowym ograniczeniem zasobów lub flagą eksperymentalną. Aby ułatwić diagnozowanie problemów lub jako tymczasowe obejście, możesz wrócić do poprzedniej implementacji, dodając android.enableNewResourceShrinker=false do interfejsu gradle.properties projektu. Nowy reduktor zastępuje nieużywane zasoby oparte na plikach nieco inaczej minimalną liczbą plików niż poprzedni reduktor zasobów, ale nie powinno to mieć wpływu na środowisko wykonawcze.

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

Publikowanie wariantu kompilacji

Wtyczka Androida do obsługi Gradle w wersji 7.1.0 lub nowszej umożliwia określenie, które warianty kompilacji mają być publikowane w repozytorium Apache Maven. Na podstawie nowego strumienia DSL do publikowania AGP tworzy komponent z jednym lub wieloma wariantami kompilacji, za pomocą którego można dostosować publikację do repozytorium Maven. W porównaniu z poprzednimi wersjami pozwala to także uniknąć niepotrzebnej pracy, ponieważ domyślnie nie będą tworzone żadne komponenty. Więcej informacji znajdziesz w przykładzie publikowania kodu.

Opublikuj dokument Javadoc JAR

AGP w wersji 7.1.0 lub nowszej umożliwia generowanie dokumentów Javadoc ze źródeł Java i Kotlin oraz publikowanie plików JAR w języku Javadoc (oprócz AAR) na potrzeby projektów bibliotek. Plik Javadoc zostanie dodany do plików POM i metadanych modułu Gradle{:.external}. Włącz tę funkcję, dodając withJavadocJar() w bloku publikacji singleVariant lub multipleVariants. Więcej informacji znajdziesz w przykładowym kodzie opcji publikowania.

Publikowanie źródeł JAR

AGP w wersji 7.1.0 i nowszych umożliwia publikowanie źródłowych plików JAR w języku Java i Kotlin w projektach bibliotek z uwzględnieniem AAR. Źródła zostaną dodane do plików POM i metadanych modułu Gradle{:.external}. Aby włączyć tę funkcję, dodaj withSourcesJar() w bloku publikacji singleVariant lub multipleVariants. Więcej informacji znajdziesz w przykładowym kodzie opcji publikowania.

Zmiana semantyczna bloku linowego

Wszystkie metody lintowania, które zastępują podany poziom ważności problemu – enable, disable/ignore, informational, warning, error, fatal – teraz przestrzegają kolejności konfiguracji. Na przykład ustawienie problemu jako krytycznych w zadaniu finalizeDsl() powoduje teraz zastąpienie jego wyłączenia w głównym DSL. Więcej informacji znajdziesz w dokumentacji z blokami lint{} oraz w opisach procesów kompilacji Androida i punktów rozszerzeń.

Interfejsy API AGP, od których zależy wtyczka do obsługi ARgs Gradle, zostały usunięte. AGP 7.1 nie działa z wersjami 2.4.0-rc1 i 2.4.0, ale będzie działać z wersjami 2.5.0-alfa01 i 2.4.1. Aby obejść ten problem, możesz użyć AGP 7.1 z kompilacją zrzutu dysku Bezpiecznego elementu nawigacji i nawigacji 2.5.0-SNAPSHOT. Aby użyć kompilacji zrzutu, wykonaj instrukcje dotyczące zrzutu z identyfikatorem kompilacji #8054565.

Dodatkowo interfejsy Safe Args w wersji 2.4.1 i 2.5.0 nie będą już działać z AGP 4.2. Aby korzystać z tych wersji, musisz korzystać z AGP w wersji 7.0 lub nowszej.

Wyłącz automatyczne tworzenie komponentów

Od wersji 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. To automatyczne tworzenie komponentów zostanie wyłączone. Aby przejść na nowy sposób działania, wyłącz automatyczne tworzenie komponentów ręcznie, ustawiając na android.disableAutomaticComponentCreation true.Więcej informacji znajdziesz w artykule Korzystanie z wtyczki Maven Publish.

Zgodność z Monitorowaniem wydajności Firebase

Pakiet AGP 7.1 jest niezgodny z wtyczką Firebase Performance Monitoring Gradle w wersji 1.4.0 lub starszej. Asystent uaktualniania AGP nie aktualizuje automatycznie wtyczki do wersji 1.4.1, więc jeśli używasz firebase-perf i chcesz uaktualnić AGP do 7.1, musisz to zrobić ręcznie.

Znane problemy

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

Problemy z testowaniem jednostkowym projektu aplikacji korzystającego z wtyczki Hilt

Ścieżka klasy do testu jednostkowego zawiera nieinstrumentowane klasy aplikacji, co oznacza, że Hilt nie instrumentuje klas aplikacji do obsługi wstrzykiwania zależności podczas testów jednostkowych.

Ten problem zostanie rozwiązany w wersji 7.1.1 (patrz numer 213534628).