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 cả hàm lambda biểu thức, tham chiếu phương thức và phương thức giao diện tĩnh. Để xem danh sách đầy đủ để hỗ trợ 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ó thể cải thiện hiệu suất của 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ợ 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 build.gradle cấp mô-đun của bạn hoặc tệp build.gradle.kts:

// 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 nhanh chóng triển khai các APK lớn bằng ADB Cài đặt APK 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ể

Giờ đây, bạn có thể bật hoặc tắt tính năng ký ứng dụng trong Android Gradle trình bổ trợ 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 đặt Thuộc tính Gradle từ android.native.buildOutput đến 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 một thuộc tính trong một Tệp gradle.properties trong một dự án phụ thay vì thư mục gốc dự án, thì tệp đó 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 mới của Gradle 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 ý: Mặc dù bạn nên chạy Gradle với JDK 11, nhưng thay đổi JDK dùng để chạy Gradle trong 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 để tự chạy 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 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 ảnh hưởng đến cấu hình mặc định của rác JVM trình thu thập, vì JDK 8 sử dụng trình thu gom rác song song trong khi JDK 11 sử dụng Trình thu gom rác G1.

Để có thể cải thiện hiệu suất của bản dựng, bạn nên kiểm thử bản dựng Gradle bằng trình thu gom 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 độ bản dựng với nhiều cấu hình, hãy xem Lập hồ sơ cho 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 các tệp 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 thư viện gốc ở dạng không nén, vì điều này dẫn đến kích thước cài đặt ứng dụng nhỏ hơn, kích thước tải xuống ứng dụng nhỏ hơn và ứng dụng tải nhanh hơn thời gian tải cho người dùng. Tuy nhiên, nếu bạn muốn trình bổ trợ Android cho Gradle đóng gói thư viện gốc được nén khi tạo ứng dụng, đặt useLegacyPackaging vào 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.