Wtyczka Androida do obsługi Gradle w wersji 4.2.0 (marzec 2021 r.)

Zgodność

Wersja minimalna Wersja domyślna Uwagi
Gradle 6.7.1 Nie dotyczy Więcej informacji znajdziesz w artykule o aktualizowaniu Gradle.
Narzędzia do kompilacji pakietu SDK 30.0.2 30.0.2 Zainstaluj lub skonfiguruj narzędzia SDK do kompilacji.
NDK Nie dotyczy 21.4.7075529 Zainstaluj lub skonfiguruj inną wersję NDK.

Nowe funkcje

Ta wersja wtyczki Androida do obsługi Gradle zawiera te nowe funkcje.

Domyślnie język Java w wersji 8

Od wersji 4.2 wtyczka Androida do obsługi Gradle będzie domyślnie używać języka Java w wersji 8. Java 8 zapewnia dostęp do wielu nowszych funkcji języka, w tym do wyrażeń lambda, odwołań do metod i statycznych metod interfejsu. Pełną listę obsługiwanych funkcji znajdziesz w dokumentacji Javy 8.

Aby zachować stare działanie, w pliku na poziomie modułu wyraźnie określ Javę 7: build.gradle.kts lub build.gradle

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

Nowy kompilator zasobów JVM

Nowy kompilator zasobów JVM w narzędziu wtyczki Androida do obsługi Gradle w wersji 4.2 zastępuje części kompilatora zasobów AAPT2, co może poprawić wydajność kompilacji, zwłaszcza na komputerach z systemem Windows. Nowy kompilator zasobów JVM jest domyślnie włączony.

Obsługa podpisywania w wersji 3 i 4

Wtyczka Androida do obsługi Gradle w wersji 4.2 obsługuje teraz formaty podpisywania APK w wersji 3 i APK w wersji 4. Aby włączyć jeden lub oba te formaty w kompilacji, dodaj te właściwości do pliku na poziomie modułu build.gradle lub build.gradle.kts:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

Podpisywanie APK w wersji 4 umożliwia szybkie wdrażanie dużych plików APK za pomocą ADB instalacji przyrostowej APK w Androidzie 11. Ta nowa flaga obsługuje etap podpisywania APK w procesie wdrażania.

Konfigurowanie podpisywania aplikacji według wariantu

We wtyczce Androida do obsługi Gradle można teraz włączać i wyłączać podpisywanie aplikacji według wariantu.

Ten przykład pokazuje, jak ustawić podpisywanie aplikacji według wariantu za pomocą metody w Kotlinie lub Groovy:onVariants()

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

Nowa właściwość Gradle: android.native.buildOutput

Aby zmniejszyć ilość niepotrzebnych informacji w wynikach kompilacji, wtyczka Androida do obsługi Gradle w wersji 4.2 filtruje komunikaty z kompilacji natywnych, które używają CMake i ndk-build, domyślnie wyświetlając tylko dane wyjściowe kompilatora C/C++. Wcześniej dla każdego skompilowanego pliku generowany był wiersz danych wyjściowych , co powodowało wyświetlanie dużej ilości komunikatów informacyjnych.

Jeśli chcesz zobaczyć wszystkie dane wyjściowe natywne, ustaw nową właściwość Gradle android.native.buildOutput na verbose.

Tę właściwość możesz ustawić w pliku gradle.properties lub w wierszu poleceń.

gradle.properties
android.native.buildOutput=verbose

Wiersz poleceń
-Pandroid.native.buildOutput=verbose

Domyślna wartość tej właściwości to quiet.

Zmiana działania w przypadku plików gradle.properties

Od wtyczki Androida do obsługi Gradle w wersji 4.2 nie można już zastępować właściwości Gradle z podprojektów. Innymi słowy, jeśli zadeklarujesz właściwość w pliku w podprojekcie zamiast w projekcie głównym, zostanie ona zignorowana.gradle.properties

Na przykład w poprzednich wersjach wtyczka Androida do obsługi Gradle odczytywała wartości z <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties, itp. W przypadku modułów aplikacji, jeśli ta sama właściwość Gradle była obecna zarówno w <var>projectDir</var>/gradle.properties jak i w <var>projectDir</var>/app/gradle.properties, pierwszeństwo miała wartość z <var>projectDir</var>/app/gradle.properties.

W wtyczce Androida do obsługi Gradle w wersji 4.2 to działanie zostało zmienione i wtyczka nie będzie wczytywać wartości z gradle.properties w podprojektach (np. <var>projectDir</var>/app/gradle.properties). Ta zmiana odzwierciedla nowe działanie Gradle i obsługuje buforowanie konfiguracji

Więcej informacji o ustawianiu wartości w gradle.properties plikach znajdziesz w dokumentacji Gradle.

Zmiany w konfiguracji i zgodności z Gradle

Podczas uruchamiania w Android Studio narzędzie do kompilacji Gradle używa pakietu JDK dołączonego do Studio. W poprzednich wersjach do Studio był dołączony pakiet JDK 8. W wersji 4.2, jest jednak dołączony pakiet JDK 11. Korzystanie z nowego dołączonego pakietu JDK do uruchamiania Gradle może spowodować pewną niezgodność lub wpłynąć na wydajność JVM ze względu na zmiany w mechanizmie odśmiecania. Te problemy opisujemy poniżej.

Uwaga: chociaż zalecamy uruchamianie Gradle z pakietem JDK 11, w oknie Struktura projektu możesz zmienić pakiet JDK używany do uruchamiania Gradle. Zmiana tego ustawienia spowoduje zmianę tylko pakietu JDK używanego do uruchamiania Gradle, a nie pakietu JDK używanego do uruchamiania samego Studio.

Zgodność Studio z wtyczką Androida do obsługi Gradle

Android Studio 4.2 może otwierać projekty, które używają wtyczki Androida do obsługi Gradle w wersji 3.1 lub nowszej pod warunkiem że wtyczka Androida do obsługi Gradle używa Gradle w wersji 4.8.1 lub nowszej. Więcej informacji o zgodności z Gradle znajdziesz w artykule Aktualizowanie Gradle.

Optymalizowanie kompilacji Gradle pod kątem pakietu JDK 11

Ta aktualizacja do pakietu JDK 11 wpływa na domyślną konfigurację mechanizmu odśmiecania JVM, ponieważ pakiet JDK 8 używa równoległego mechanizmu odśmiecania, a pakiet JDK 11 – mechanizmu odśmiecania G1.

Aby potencjalnie poprawić wydajność kompilacji, zalecamy testowanie kompilacji Gradle z równoległym mechanizmem odśmiecania. W pliku gradle.properties ustaw te wartości:

org.gradle.jvmargs=-XX:+UseParallelGC

Jeśli w tym polu są już ustawione inne opcje, dodaj nową opcję:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

Aby zmierzyć szybkość kompilacji przy różnych konfiguracjach, zapoznaj się z artykułem Profilowanie kompilacji.

Nieskompresowane pliki DEX w plikach APK, gdy minSdk = 28 lub nowszy

Wtyczka Androida do obsługi Gradle domyślnie pakuje teraz nieskompresowane pliki DEX w plikach APK, gdy minSdk = 28 lub nowszy. Powoduje to zwiększenie rozmiaru pliku APK, ale zmniejsza rozmiar instalacji na urządzeniu, a rozmiar pobierania jest mniej więcej taki sam.

Aby wymusić na wtyczce Androida do obsługi Gradle pakowanie skompresowanych plików DEX, możesz dodać te informacje do pliku build.gradle file:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Używanie DSL do pakowania skompresowanych bibliotek natywnych

Zalecamy przygotowywanie pakietów bibliotek natywnych w postaci nieskompresowanej, ponieważ zmniejsza to rozmiar instalacji aplikacji, rozmiar pobierania aplikacji i czas wczytywania aplikacji przez użytkowników. Jeśli jednak chcesz, aby wtyczka Androida do obsługi Gradle pakowała skompresowane biblioteki natywne podczas tworzenia aplikacji, ustaw useLegacyPackaging na true w pliku build.gradle aplikacji:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Flaga useLegacyPackaging zastępuje atrybut manifestu extractNativeLibs. Więcej informacji znajdziesz w informacji o wersji Biblioteki natywne domyślnie pakowane w postaci nieskompresowanej.