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 Aktualizowanie Gradle.
Narzędzia do kompilacji pakietu SDK 30.0.2 30.0.2 Zainstaluj lub skonfiguruj narzędzia SDK Build Tools.
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 wtyczka Androida do obsługi Gradle będzie 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 wtyczki Androida do obsługi Gradle w wersji 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

We 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, wtyczka Androida do obsługi Gradle 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ć pełne dane wyjściowe, 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 4.2 wtyczki Androida do obsługi Gradle nie można już zastępować właściwości Gradle w podprojektach. 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 wtyczka Androida do obsługi Gradle odczytywała wartości z plików <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 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 pamięć podręczną 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 uruchamiania w Android Studio narzędzie do kompilacji Gradle korzysta z pakietu 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 pakietem JDK 11, ale w oknie Project Structure możesz zmienić pakiet JDK używany do uruchamiania Gradle. Zmiana tego ustawienia spowoduje zmianę tylko JDK używanego do uruchamiania Gradle i nie wpłynie na JDK używany 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 wtyczki Androida do obsługi Gradle w wersji 3.1 lub nowszej, pod warunkiem że wtyczka Androida do obsługi Gradle działa w Gradle 4.8.1 lub nowszym. Więcej informacji o zgodności z Gradle znajdziesz w artykule Aktualizowanie Gradle.

Optymalizacja kompilacji Gradle pod kątem pakietu 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 używa 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ć spakowanie plików DEX przez AGP, 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 kompilowania 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.