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 Ghi chú
Gradle 6.7.1 Không áp dụng Để tìm hiểu thêm, hãy xem nội dung 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ả biểu thức lambda, nội dung 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ữ lại hành vi 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ênAAPT2. Điều này có thể giúp cải thiện hiệu suất bản dựng, đặc biệt là trên máy Windows. Trình biên dịch tài nguyên JVM mới được bật theo mặc định.

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 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 nhanh chóng triển khai các tệp APK lớn bằng cách sử dụng tính năng cài đặt tệp APK gia tăng ADB trong Android 11. Cờ mới này sẽ xử lý bước ký 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 tắt 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 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 của 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 sử dụng CMakendk-build, theo mặc định chỉ hiển thị đầu ra của trình biên dịch C/C++. Trước đây, mỗi tệp được tạo đều được tạo một dòng đầu ra, dẫn đến số lượng lớn các 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 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ừ 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 tệp gradle.properties trong một dự án phụ thay vì dự án gốc, thì thuộc tính đó sẽ bị bỏ qua.

Ví dụ: trong các bản phát hành trước, AGP sẽ đọc cá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 cùng một thuộc tính Gradle có trong cả <var>projectDir</var>/gradle.properties<var>projectDir</var>/app/gradle.properties, thì giá trị từ <var>projectDir</var>/app/gradle.properties sẽ được ưu tiên.

Trong AGP 4.2, hành vi này đã bị thay đổi và AGP sẽ không tải các giá trị từ 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ợ việc lưu cấu hình vào bộ nhớ đệm

Để biết thêm thông tin về cách cài đặ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 bạn cũng có thể thay đổi JDK dùng để 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 bài viết 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 bộ thu gom rác JVM, vì JDK 8 sử dụng bộ thu gom rác song song, còn JDK 11 sử dụng bộ 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 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 tệp APK khi minSdk = 28 trở lên. Điều này làm tăng kích thước tệp APK, nhưng dẫn đến kích thước cài đặt nhỏ hơn trên thiết bị và kích thước tải xuống gần tương đương.

Để buộc AGP phải đóng gói các tệp DEX theo cách nén, bạn có thể thêm đoạn mã 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 sẽ làm giảm kích thước cài đặt ứng dụng, kích thước tải xuống ứng dụng nhỏ hơn và thời gian tải ứng dụng nhanh hơn cho 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 đượ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.