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

Zgodność

  Wersja minimalna Wersja domyślna Notatki
Gradle 6.7.1 Nie dotyczy Więcej informacji znajdziesz w artykule na temat aktualizowania Gradle.
Narzędzia do tworzenia pakietów 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 nowe funkcje.

Domyślnie język Java w wersji 8

Od wersji 4.2 pakiet AGP będzie domyślnie korzystać z języka Java 8. Java 8 zapewnia dostęp do wielu nowszych funkcji językowych, w tym wyrażeń lambda, odwołań do metod i metod interfejsu statycznego. Pełną listę obsługiwanych funkcji znajdziesz w dokumentacji Java 8.

Aby zachować stare zachowanie, określ Javę 7 bezpośrednio 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, potencjalnie zwiększając 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 teraz obsługiwane

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

// 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 przyrostowej plików APK na Androidzie 11. Ta nowa flaga obejmuje etap podpisywania plików APK w procesie wdrażania.

Skonfiguruj podpisywanie aplikacji dla poszczególnych wariantów

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

Ten przykład pokazuje, jak ustawić podpisywanie aplikacji dla poszczególnych wariantów 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 filtruje wiadomości 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 tworzonego pliku generowany był wiersz danych wyjściowych, w wyniku czego pojawiała się duża liczba komunikatów informacyjnych.

Jeśli chcesz zobaczyć wszystkie natywne 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 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 AGP 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 projekcie głównym, zostanie ona zignorowana.

Na przykład w poprzednich wersjach narzędzie AGP odczytywało wartości z interfejsó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 zarówno <var>projectDir</var>/gradle.properties, jak i <var>projectDir</var>/app/gradle.properties zawierały tę samą właściwość Gradle, miałaby pierwszeństwo.<var>projectDir</var>/app/gradle.properties

W AGP 4.2 to zachowanie zostało zmienione i interfejs AGP nie będzie wczytywał wartości z projektu 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 w konfiguracji i zgodność z Gradle

W przypadku działania w Android Studio narzędzie do kompilacji Gradle korzysta z pakietu JDK w Studio. W poprzednich wersjach pakiet JDK 8 był dostępny w pakiecie ze Studio. Jednak w wersji 4.2 pakiet JDK 11 jest już w pakiecie. Używanie nowego pakietu JDK do uruchamiania Gradle przy użyciu nowego pakietu JDK może skutkować niekompatybilnością lub mieć wpływ na wydajność JVM z powodu zmian w module odśmiecania. Opis tych problemów znajduje się poniżej.

Uwaga: chociaż zalecamy uruchamianie Gradle w pakiecie JDK 11, można zmienić pakiet JDK użyty do jego uruchomienia w oknie Struktura projektu. Zmiana tego ustawienia spowoduje tylko zmianę pakietu JDK używanego do uruchamiania Gradle. Nie zmieni się natomiast plik JDK użyty do uruchomienia Studio.

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

Android Studio 4.2 umożliwia otwieranie projektów korzystających z pakietu AGP w wersji 3.1 lub nowszej, o ile AGP używa Gradle w wersji 4.8.1 lub nowszej. Więcej informacji o zgodności z Gradle znajdziesz w artykule o aktualizowaniu Gradle.

Optymalizacja kompilacji Gradle pod kątem pakietu JDK 11

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

Jeśli chcesz potencjalnie zwiększyć wydajność kompilacji, zalecamy przetestowanie kompilacji Gradle przy użyciu równoległego modułu do czyszczenia pamięci. W sekcji gradle.properties ustaw te wartości:

org.gradle.jvmargs=-XX:+UseParallelGC

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

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

Aby zmierzyć szybkość kompilacji w różnych konfiguracjach, zapoznaj się z sekcją Profilowanie kompilacji.

Pliki DEX nieskompresowane w plikach APK, gdy minSdk = 28 lub nowsza

AGP domyślnie pakuje pliki DEX nieskompresowane w plikach APK, gdy minSdk = 28 lub nowsza. Powoduje to zwiększenie rozmiaru pliku APK, ale powoduje zmniejszenie rozmiaru instalacji na urządzeniu. Rozmiar pobieranego pliku jest mniej więcej taki sam.

Aby wymusić na AGP spakowanie skompresowanych plików DEX, możesz dodać do pliku build.gradle te elementy:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Pakowanie skompresowanych bibliotek natywnych za pomocą DSL

Zalecamy pakowanie bibliotek natywnych w postaci nieskompresowanej, ponieważ zmniejsza to rozmiar instalowanej aplikacji i rozmiar do pobrania aplikacji oraz krótszy czas jej wczytywania. Jeśli jednak chcesz, aby wtyczka Androida do obsługi Gradle pakowała skompresowane biblioteki natywne podczas tworzenia aplikacji, ustaw parametr 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: Biblioteki natywne domyślnie spakowane bez kompresji.