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 sekcji Aktualizowanie Gradle.
SDK Build Tools 30.0.2 30.0.2 Zainstaluj lub skonfiguruj narzędzia do kompilacji pakietu SDK.
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 wersja języka Java 8

Od wersji 4.2 AGP domyślnie używa poziomu języka Java 8. Java 8 zapewnia dostęp do wielu nowszych funkcji języka, w tym 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 build.gradle.kts lub build.gradle na poziomie modułu określ jawnie Javę 7:

// 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 Android Gradle Plugin 4.2 zastępuje części 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.

Obsługa podpisywania w wersjach 3 i 4

Wtyczka Androida do obsługi Gradle w wersji 4.2 obsługuje teraz formaty podpisywania APK w wersji 3APK w wersji 4. Aby włączyć w kompilacji jeden lub oba te formaty, 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ą przyrostowej instalacji plików APK w ADB na Androidzie 11. Ten nowy znacznik obsługuje krok podpisywania pliku APK w procesie wdrażania.

Konfigurowanie podpisywania aplikacji dla poszczególnych wariantów

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

W tym przykładzie pokazujemy, jak skonfigurować podpisywanie aplikacji dla każdego wariantu za pomocą metody onVariants() w języku 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 zmniejszyć ilość informacji w danych wyjściowych kompilacji, AGP 4.2 filtruje komunikaty z kompilacji natywnych, które korzystają z CMakendk-build, domyślnie wyświetlając tylko dane wyjściowe kompilatora C/C++. Wcześniej dla każdego utworzonego pliku generowany był wiersz danych wyjściowych, co powodowało wyświetlanie dużej liczby komunikatów informacyjnych.

Jeśli chcesz zobaczyć cały wynik natywny, ustaw nową właściwość Gradle android.native.buildOutput na verbose.

Możesz ustawić tę właściwość 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 plików gradle.properties

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

Na przykład w poprzednich wersjach AGP odczytywał wartości z plików <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties itd. W przypadku modułów aplikacji, jeśli ta sama właściwość Gradle występowała w plikach <var>projectDir</var>/gradle.properties<var>projectDir</var>/app/gradle.properties, wartość z pliku <var>projectDir</var>/app/gradle.properties miała pierwszeństwo.

W AGP 4.2 to zachowanie zostało zmienione i AGP 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 plikach gradle.properties znajdziesz w dokumentacji Gradle.

Zmiany dotyczące zgodności i konfiguracji Gradle

Podczas działania w Android Studio narzędzie do kompilacji Gradle korzysta z JDK dołączonego do Studio. W poprzednich wersjach pakiet JDK 8 był dołączany do Studio. W wersji 4.2 jest jednak dołączony pakiet JDK 11. Jeśli do uruchamiania Gradle używasz nowego pakietu JDK, może to spowodować pewną niezgodność lub wpłynąć na wydajność JVM ze względu na zmiany w mechanizmie odśmiecania pamięci. Opis tych problemów znajdziesz poniżej.

Uwaga: zalecamy uruchamianie Gradle z JDK 11, ale w oknie Project Structure możesz zmienić wersję JDK używaną do uruchamiania Gradle. Zmiana tego ustawienia spowoduje zmianę tylko JDK używanego do uruchamiania Gradle, a nie JDK używanego do uruchamiania samego Studio.

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

Android Studio 4.2 może otwierać projekty, które korzystają z AGP 3.1 i nowszych, pod warunkiem że AGP działa w Gradle 4.8.1 i nowszych. Więcej informacji o zgodności z Gradle znajdziesz w artykule Aktualizowanie Gradle.

Optymalizowanie kompilacji Gradle pod kątem JDK 11

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

Aby potencjalnie zwiększyć wydajność kompilacji, zalecamy testowanie kompilacji Gradle za pomocą równoległego modułu odśmiecania pamięci. W gradle.properties ustaw te opcje:

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 wyższa

AGP domyślnie pakuje 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 pozostaje mniej więcej taki sam.

Aby wymusić na AGP spakowanie plików DEX w formacie skompresowanym, możesz dodać do pliku build.gradle ten kod:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Używanie DSL do pakowania skompresowanych bibliotek natywnych

Zalecamy pakowanie bibliotek natywnych w formie nieskompresowanej, ponieważ zmniejsza to rozmiar instalacji i pobierania aplikacji oraz skraca czas jej wczytywania. Jeśli jednak chcesz, aby wtyczka Androida do obsługi Gradle pakowała skompresowane biblioteki natywne podczas tworzenia aplikacji, ustaw wartość useLegacyPackaging na true w pliku build.gradle aplikacji:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Flaga useLegacyPackaging zastępuje atrybut pliku manifestu extractNativeLibs. Więcej informacji znajdziesz w informacjach o wersji Nieskompresowane biblioteki natywne pakowane domyślnie.