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

Zgodność

  Wersja minimalna Wersja domyślna Uwagi
Gradle 6.7.1 Nie dotyczy Aby dowiedzieć się więcej, zobacz aktualizowanie Gradle.
Narzędzia do tworzenia pakietów SDK 30.0.2 30.0.2 Zainstaluj lub skonfiguruj narzędzia do kompilacji SDK.
NDK Nie dotyczy 21.4.7075529 Zainstaluj lub skonfiguruj inną wersję pakietu NDK.

Nowe funkcje

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

Domyślny język Java w wersji 8

Od wersji 4.2 AGP domyślnie używa języka Java 8. Java 8 zapewnia dostęp do wielu nowszych funkcji językowych, takich jak wyrażenia lambda, odwołania do metod i statyczne metody interfejsu. Pełną listę obsługiwanych funkcji znajdziesz w dokumentacji języka Java 8.

Aby zachować stare zachowanie, określ wyraźnie język Java 7 w pliku build.gradle.kts lub build.gradle na poziomie modułu:

// 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 we wtyczce Androida do obsługi Gradle w wersji 4.2 zastępuje fragmenty kompilatora zasobów AAPT2, co może zwiększyć wydajność kompilacji, zwłaszcza na komputerach z systemem Windows. Nowy kompilator zasobów JVM jest domyślnie włączony.

Podpisywanie w wersjach 3 i 4 jest już obsługiwane

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ć w kompilacji jeden lub oba z tych formatów, dodaj te właściwości do pliku build.gradle lub build.gradle.kts na poziomie modułu:

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

Podpisywanie plików APK w wersji 4 umożliwia szybkie wdrażanie dużych plików APK za pomocą instalacji dodatkowych plików APK ADB w Androidzie 11. Ta nowa flaga zajmuje się etapem podpisywania pakietu APK w procesie wdrażania.

Skonfiguruj podpisywanie aplikacji według wariantu

Teraz można włączać i wyłączać podpisywanie aplikacji we wtyczce Androida do obsługi Gradle w przypadku poszczególnych wariantów.

Ten przykład pokazuje, jak ustawić podpisywanie aplikacji dla każdego wariantu za pomocą metody onVariants() w Kotlin lub Groovy:

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

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

Aby zwiększyć przejrzystość danych wyjściowych kompilacji, AGP 4.2 odfiltrowuje wiadomości z kompilacji natywnych, które korzystają z CMake i ndk-build, i domyślnie wyświetlają tylko dane wyjściowe kompilatora C/C++. Wcześniej dla każdego tworzonego pliku generowany był wiersz danych wyjściowych, co powodowało generowanie dużej liczby wiadomości informacyjnych.

Aby zobaczyć całość danych wyjściowych, ustaw nową właściwość Gradle android.native.buildOutput na verbose.

Możesz ustawić tę właściwość w pliku gradle.properties lub za pomocą wiersza poleceń.

gradle.properties
android.native.buildOutput=verbose

Wiersz poleceń
-Pandroid.native.buildOutput=verbose

Wartość domyślna tej właściwości to quiet.

Zmiana działania plików gradle.properties

Od wersji 4.2 nie można już zastępować właściwości Gradle z podprojektów. Inaczej mówiąc, jeśli zadeklarujesz właściwość w pliku gradle.properties w podprojekcie, a nie w głównym projekcie, zostanie ona zignorowana.

Na przykład w poprzednich wersjach AGP odczytuje 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 dostępna zarówno w <var>projectDir</var>/gradle.properties, jak i w <var>projectDir</var>/app/gradle.properties, pierwszeństwo miałaby wartość z kolumny <var>projectDir</var>/app/gradle.properties.

W AGP 4.2 ten sposób działania uległ zmianie – AGP nie będzie wczytywać wartości z projektu gradle.properties w podprojektach (np. <var>projectDir</var>/app/gradle.properties). Ta zmiana odzwierciedla nowy sposób działania Gradle i obsługuje buforowanie konfiguracji

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

Zmiany w konfiguracji i zgodności Gradle

Gdy narzędzie do tworzenia Gradle działa w Android Studio, korzysta z pakietu JDK należącego do Studio. W poprzednich wersjach pakiet JDK 8 był połączony ze Studio. Jednak w wersji 4.2 pakiet JDK 11 jest teraz dostępny w pakiecie. Jeśli do uruchamiania Gradle używasz nowego pakietu JDK, może to spowodować niezgodność lub wpłynąć na wydajność JVM z powodu zmian w module czyszczenia pamięci. Te problemy opisujemy poniżej.

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

Zgodność Studio z wtyczką Android Gradle (AGP)

W Android Studio w wersji 4.2 można otwierać projekty korzystające z protokołu AGP w wersji 3.1 lub nowszej, pod warunkiem że AGP obsługuje Gradle w wersji 4.8.1 lub nowszej. Więcej informacji o zgodności Gradle znajdziesz w artykule o aktualizowaniu Gradle.

Optymalizacja kompilacji Gradle dla JDK 11

Ta aktualizacja do JDK 11 ma wpływ na domyślną konfigurację modułu czyszczenia pamięci JVM, ponieważ JDK 8 używa równoległego modułu do czyszczenia pamięci, a JDK 11 korzysta z kolektora śmieci G1.

Aby potencjalnie zwiększyć wydajność kompilacji, zalecamy przetestowanie kompilacji Gradle przy użyciu równoległego kolektora czyszczenia pamięci. W gradle.properties ustaw te opcje:

org.gradle.jvmargs=-XX:+UseParallelGC

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

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

Aby zmierzyć szybkość kompilacji w różnych konfiguracjach, przeczytaj o profilowaniu kompilacji.

Pliki DEX nieskompresowane w pakietach APK, gdy minSdk ma wartość 28 lub więcej.

AGP domyślnie pakuje pliki DEX nieskompresowane w pakietach APK, gdy minSdk ma wartość 28 lub więcej. Powoduje to zwiększenie rozmiaru pliku APK, ale zmniejsza rozmiar instalacji na urządzeniu i przybliżony rozmiar pobieranego pliku.

Aby wymusić utworzenie pakietu skompresowanych plików DEX przez AGP, możesz dodać do pliku build.gradle ten fragment:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Pakowanie skompresowanych bibliotek natywnych za pomocą DSL

Zalecamy tworzenie pakietów bibliotek natywnych w postaci nieskompresowanej, ponieważ zmniejsza to rozmiar instalacji aplikacji, zmniejsza się rozmiar pobieranej aplikacji i przyspiesza wczytywanie aplikacji. Jeśli jednak chcesz, by wtyczka Androida do obsługi Gradle w pakiecie skompresowanych bibliotek natywnych podczas tworzenia aplikacji ustaw w pliku build.gradle aplikacji ustawienie useLegacyPackaging na true:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Flaga useLegacyPackaging zastępuje atrybut extractNativeLibs w pliku manifestu. Więcej informacji znajdziesz w informacjach o wersji: Biblioteki natywne domyślnie spakowane nieskompresowane.