Trình bổ trợ Android cho Gradle 4.2.0 (tháng 3 năm 2021)

Khả năng tương thích

Phiên bản tối thiểu Phiên bản mặc định Lưu ý
Gradle 6.7.1 Không áp dụng Để tìm hiểu thêm, hãy xem phần cập nhật Gradle.
Công cụ tạo SDK 30.0.2 30.0.2 Cài đặt hoặc định cấu hình Công cụ tạo SDK.
NDK Không áp dụng 21.4.7075529 Cài đặt hoặc định cấu hình phiên bản khác của NDK.

Tính năng mới

Phiên bản trình bổ trợ Android cho Gradle này có các tính năng mới sau đây.

Ngôn ngữ Java phiên bản 8 theo mặc định

Kể từ phiên bản 4.2, theo mặc định, AGP sẽ sử dụng ngôn ngữ Java cấp 8. Java 8 cung cấp quyền truy cập vào một số tính năng ngôn ngữ mới hơn bao gồm biểu thức lambda, tham chiếu phương thức và phương thức giao diện tĩnh. Để biết danh sách đầy đủ các tính năng được hỗ trợ, hãy xem tài liệu về Java 8.

Để giữ nguyên hoạt động cũ, hãy chỉ định Java 7 một cách rõ ràng trong tệp build.gradle.kts hoặc build.gradle ở cấp mô-đun:

// 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"
  }
}

Trình biên dịch tài nguyên JVM mới

Trình biên dịch tài nguyên JVM mới trong công cụ trình bổ trợ Android cho Gradle 4.2 thay thế các phần của trình biên dịch tài nguyên AAPT2, có khả năng cải thiện hiệu suất bản dựng, đặc biệt là trên máy Windows. Theo mặc định, trình biên dịch tài nguyên JVM mới được bật.

Hỗ trợ ký bằng v3 và v4

Trình bổ trợ Android cho Gradle 4.2 hiện hỗ trợ các định dạng chữ ký APK v3APK v4. Để bật một hoặc cả hai định dạng này trong bản dựng, hãy thêm các thuộc tính sau vào tệp build.gradle hoặc build.gradle.kts ở cấp mô-đun:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

Tính năng ký APK v4 cho phép bạn triển khai nhanh chóng các tệp APK lớn bằng cách sử dụng quy trình cài đặt tệp APK ADB gia tăng trong Android 11. Cờ mới này sẽ xử lý bước ký tệp APK trong quá trình triển khai.

Định cấu hình việc ký ứng dụng theo biến thể

Hiện bạn có thể bật hoặc vô hiệu hoá tính năng ký ứng dụng trong trình bổ trợ Android cho Gradle cho mỗi biến thể.

Ví dụ này minh hoạ cách thiết lập tính năng ký ứng dụng cho mỗi biến thể bằng cách sử dụng phương thức onVariants() trong Kotlin hoặc Groovy:

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

Thuộc tính Gradle mới: android.native.buildOutput

Để giảm sự lộn xộn trong đầu ra bản dựng, AGP 4.2 sẽ lọc các thông báo từ các bản dựng gốc có sử dụng CMake và theo mặc định ndk-build, chỉ cho thấy đầu ra của trình biên dịch C/C++. Trước đây, một dòng đầu ra được tạo cho mọi tệp được xây dựng, dẫn đến tạo ra số lượng lớn thông báo thông tin.

Nếu bạn muốn xem toàn bộ kết quả gốc, hãy thiết lập thuộc tính Gradle mới android.native.buildOutput thành verbose.

Bạn có thể thiết lập thuộc tính này trong tệp gradle.properties hoặc thông qua dòng lệnh.

gradle.properties
android.native.buildOutput=verbose

Dòng lệnh
-Pandroid.native.buildOutput=verbose

Giá trị mặc định của thuộc tính này là quiet.

Thay đổi hành vi các tệp gradle.properties

Kể từ phiên bản AGP 4.2, bạn không thể ghi đè các thuộc tính Gradle qua các dự án phụ nữa. Nói cách khác, nếu bạn khai báo thuộc tính trong tệp gradle.properties trong một dự án phụ thay vì dự án gốc, thuộc tính này sẽ bị bỏ qua.

Ví dụ: trong các bản phát hành trước, AGP sẽ đọc giá trị từ <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties, v.v. Đối với các mô-đun ứng dụng, nếu <var>projectDir</var>/gradle.properties<var>projectDir</var>/app/gradle.properties có cùng thuộc tính Gradle, giá trị của <var>projectDir</var>/app/gradle.properties sẽ được ưu tiên.

Trong AGP 4.2, hành vi này đã được thay đổi và AGP sẽ không tải giá trị qua gradle.properties trong các dự án con (ví dụ: <var>projectDir</var>/app/gradle.properties). Thay đổi này phản ánh hành vi Gradle mới và hỗ trợ lưu cấu hình vào bộ nhớ đệm

Để biết thêm thông tin về cách đặt giá trị trong tệp gradle.properties, hãy xem tài liệu về Gradle.

Thay đổi về cấu hình và khả năng tương thích với Gradle

Khi chạy trong Android Studio, công cụ bản dựng Gradle sẽ sử dụng JDK đi kèm của Studio. Trong các bản phát hành trước, JDK 8 được đóng gói với Studio. Tuy nhiên, trong 4.2 thì lại là JDK 11. Khi sử dụng JDK 11 được đóng gói để chạy Gradle, điều này có thể dẫn đến một số điểm không tương thích hoặc ảnh hưởng đến hiệu suất của JVM do những thay đổi đối với bộ thu gom rác. Những vấn đề này được mô tả dưới đây.

Lưu ý: Bạn nên chạy Gradle với JDK 11, tuy nhiên, bạn cũng có thể thay đổi JDK để chạy Gradle trong hộp thoại Project Structure (Cấu trúc dự án). Việc thay đổi chế độ cài đặt này sẽ chỉ thay đổi JDK dùng để chạy Gradle và sẽ không thay đổi JDK dùng để chạy chính Studio.

Khả năng tương thích của Studio với trình bổ trợ Android cho Gradle (AGP)

Android Studio 4.2 có thể mở các dự án sử dụng AGP 3.1 trở lên miễn là AGP đang chạy Gradle 4.8.1 trở lên. Để biết thêm thông tin về khả năng tương thích với Gradle, hãy xem phần Cập nhật Gradle.

Tối ưu hoá bản dựng Gradle cho JDK 11

Bản cập nhật này của JDK 11 tác động đến cấu hình mặc định của bộ thu gom rác JVM, vì JDK 8 sử dụng bộ thu gom rác song song trong khi JDK 11 sử dụng bộ thu gom rác G1.

Để có thể cải thiện hiệu suất bản dựng, bạn nên kiểm thử bản dựng Gradle bằng trình thu thập rác song song. Trong gradle.properties, hãy thiết lập những mục sau:

org.gradle.jvmargs=-XX:+UseParallelGC

Nếu các tuỳ chọn khác đã được thiết lập trong trường này, hãy thêm tuỳ chọn mới:

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

Để đo tốc độ tạo bản dựng với nhiều cấu hình, hãy xem phần Phân tích bản dựng.

Tệp DEX không nén trong tệp APK khi minSdk = 28 trở lên

Theo mặc định, AGP sẽ đóng gói các tệp DEX không nén trong APK khi minSdk = 28 trở lên. Điều này làm tăng dung lượng APK, nhưng dẫn đến dung lượng cài đặt nhỏ hơn trên thiết bị và dung lượng tải xuống gần tương tự như trước.

Để buộc AGP phải đóng gói các tệp DEX theo cách nén, bạn có thể thêm nội dung sau vào tệp build.gradle:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Sử dụng DSL để đóng gói thư viện gốc đã nén

Bạn nên đóng gói các thư viện gốc ở dạng không nén vì thao tác này giúp rút gọn dung lượng cài đặt ứng dụng, dung lượng tải xuống của ứng dụng và rút ngắn thời gian tải ứng dụng của người dùng. Tuy nhiên, nếu bạn muốn trình bổ trợ Android cho Gradle đóng gói các thư viện gốc đã nén khi tạo ứng dụng, hãy đặt useLegacyPackaging thành true trong tệp build.gradle của ứng dụng:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Cờ useLegacyPackaging thay thế thuộc tính tệp kê khai extractNativeLibs. Để biết thêm thông tin cơ bản, hãy xem ghi chú phát hành Thư viện gốc đóng gói không nén theo mặc định.