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 na temat aktualizowania Gradle.
Narzędzia do kompilowania 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 poniższe 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 szeregu nowszych funkcji językowych, w tym do lambda wyrażeń, odwołań do metod i statycznych metod interfejsu. Pełna lista obsługiwanych funkcji znajdziesz w dokumentacji Java 8.

Aby zachować stare zachowanie, określ Javę 7 jawnie na poziomie modułu Plik build.gradle.kts lub build.gradle:

// 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 pliku 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. Ta nowa flaga obejmuje etap podpisywania plików APK podczas wdrażania proces tworzenia konta.

Skonfiguruj podpisywanie aplikacji dla poszczególnych wariantów

Teraz można włączać i wyłączać podpisywanie aplikacji w systemie Gradle Androida. wtyczki na wariant.

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ą CMakendk-build, wyświetlając domyślnie tylko dane wyjściowe kompilatora C/C++. Wcześniej wiersz danych wyjściowych dla każdego tworzonego pliku, co skutkowało dużą liczbą wiadomości informacyjne.

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ść 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 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 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 wynika z nowy sposób działania Gradle i obsługa buforowanie konfiguracji

Więcej informacji o ustawianiu wartości w polu gradle.properties plików, zobacz Dokumentacja Gradle

Zmiany dotyczące zgodności i konfiguracji Gradle

W przypadku działania w Android Studio narzędzie do kompilacji Gradle korzysta z pakietu JDK w Studio. 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. Opis tych problemów znajduje się poniżej.

Uwaga: zalecamy uruchamianie Gradle z pakietem JDK 11, ale można zmienić pakiet JDK używany do uruchamiania Gradle w Struktura projektu . Zmiana tego ustawienia spowoduje tylko zmianę pakietu JDK używanego do uruchamiania Gradle. nie zmienia pakietu JDK używanego do uruchamiania samego Studio.

Zgodność Studio z Androidem Wtyczka 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 na potrzeby JDK 11

Ta aktualizacja pakietu JDK 11 wpływa na domyślną konfigurację czyszczenia pamięci JVM kolektora, bo JDK 8 używa równoległego procesu czyszczenia pamięci, a JDK 11 używa Śmieciownia G1.

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

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 przy użyciu różnych konfiguracji, zapoznaj się z artykułem Profiluj kompilację

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 wyżej. 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 pakowanie bibliotek natywnych w formie nieskompresowanej, ponieważ powoduje to zmniejszenie rozmiaru instalacji i pobrania aplikacji oraz skrócenie czasu ładowania aplikacji dla użytkowników. Jeśli jednak chcesz, aby wtyczka Androida do obsługi Gradle pakiet należy do skompresowanych bibliotek natywnych podczas tworzenia aplikacji, ustaw useLegacyPackaging do true w pliku build.gradle aplikacji:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Flaga useLegacyPackaging zastępuje atrybut pliku manifestu extractNativeLibs. Więcej informacji znajdziesz w informacji o wersji Biblioteki natywne pakowane domyślnie w postaci nieskompresowanej.