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

Zgodność

Minimalna wersja Wersja domyślna Uwagi
Gradle 6.7.1 Nie dotyczy Więcej informacji znajdziesz w artykule Aktualizowanie Gradle.
Narzędzia do kompilowania pakietu SDK 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 Gradle do Androida zawiera te nowe funkcje:

Domyślnie wersja języka Java 8

Począwszy od wersji 4.2, AGP 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 Java 8.

Aby zachować stare działanie, w pliku na poziomie modułu build.gradle.kts lub build.gradle określ Java 7 w sposób jawny:

// 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 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 3APK w wersji 4. Aby włączyć jeden lub oba te formaty w kompilacji, 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 APK za pomocą ADB w Androidzie 11. Ten nowy znacznik odpowiada za etap podpisywania pliku APK w procesie wdrażania.

Konfigurowanie podpisywania aplikacji na podstawie wariantu

Teraz możesz włączać i wyłączać podpisywanie aplikacji w pliku Android Gradle wtyczka na podstawie wariantu.

Ten przykład pokazuje, jak skonfigurować podpisywanie aplikacji na podstawie wariantu za pomocą metody onVariants() w Kotlinie lub Groovy:

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

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

Aby ograniczyć ilość danych wyjściowych kompilacji, AGP 4.2 filtruje komunikaty z kompilacji natywnych, które używają CMake i ndk-build, wyświetlając domyślnie tylko dane wyjściowe kompilatora C/C++. Wcześniej dla każdego utworzonego pliku generowano wiersz danych wyjściowych, co powodowało dużą ilość wiadomości informacyjnych.

Jeśli chcesz zobaczyć cały natywny wynik, 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 polecenia
-Pandroid.native.buildOutput=verbose

Wartością domyślną tej właściwości jest quiet.

Zmiana działania plików gradle.properties

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

Na przykład w poprzednich wersjach AGP odczytywał wartości z <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 była obecna w obu plikach <var>projectDir</var>/gradle.properties<var>projectDir</var>/app/gradle.properties, pierwszeństwo miała wartość z <var>projectDir</var>/app/gradle.properties.

W wersji 4.2 AGP to zachowanie zostało zmienione i nie będzie ona już wczytywać wartości z poziomu gradle.properties w projektach podrzędnych (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.propertiesznajdziesz w dokumentacji Gradle.

Zmiany dotyczące zgodności i konfiguracji Gradle

Gdy działa w Android Studio, narzędzie do kompilowania Gradle korzysta z załączonego pakietu JDK. W poprzednich wersjach JDK 8 było dołączone do Studio. W wersji 4.2 JDK 11 jest jednak dołączony. Używanie nowej wersji pakietu JDK do uruchamiania Gradle może spowodować pewne niezgodności lub wpłynąć na wydajność JVM z powodu zmian w zbieraczu pamięci podręcznej. Te problemy opisujemy poniżej.

Uwaga: chociaż zalecamy uruchamianie Gradle za pomocą JDK 11, w oknie struktury projektu można 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 wtyczkową wtyczką Androida do obsługi Gradle (AGP)

Android Studio 4.2 może otwierać projekty korzystające z AGP 3.1 lub nowszej, o ile w AGP jest uruchomione Gradle 4.8.1 lub nowsza wersja. Więcej informacji o zgodności Gradle znajdziesz w artykule Aktualizowanie Gradle.

Optymalizacja kompilacji Gradle pod kątem JDK 11

Ta aktualizacja do JDK 11 wpływa na domyślną konfigurację zbieracza śmieci JVM, ponieważ JDK 8 używa równoległego zbieracza śmieci, a JDK 11 używa zbieracza śmieci G1.

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

org.gradle.jvmargs=-XX:+UseParallelGC

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

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

Aby zmierzyć szybkość kompilacji w różnych konfiguracjach, przeczytaj artykuł Profilowanie kompilacji.

pliki DEX nieskompresowane w plikach APK, gdy minSdk = 28 lub więcej;

AGP domyślnie pakuje nieskompresowane pliki DEX w plikach APK, gdy minSdk = 28 lub więcej. Spowoduje to zwiększenie rozmiaru pliku APK, ale zmniejszy rozmiar instalacyjny na urządzeniu, a rozmiar pliku do pobrania pozostanie mniej więcej taki sam.

Aby wymusić skompresowanie plików DEX przez AGP, dodaj do pliku build.gradle te informacje:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Pakowanie skompresowanych bibliotek natywnych za pomocą DSL

Zalecamy skompresowanie bibliotek natywnych, ponieważ zmniejsza to rozmiar aplikacji po zainstalowaniu i pobieraniu oraz skraca czas wczytywania aplikacji przez użytkowników. Jeśli jednak chcesz, aby wtyczka Androida do obsługi Gradle pakowała skompresowane biblioteki natywne podczas kompilowania aplikacji, w pliku build.gradle aplikacji ustaw wartość useLegacyPackaging na true:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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