Trình bổ trợ Android cho Gradle 8.0.0 (tháng 4 năm 2023)

Trình bổ trợ Android cho Gradle 8.0.0 là một bản phát hành chính bao gồm nhiều tính năng và điểm cải thiện mới.

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 8.0 8.0 Để tìm hiểu thêm, hãy xem phần cập nhật Gradle.
Công cụ tạo SDK 30.0.3 30.0.3 Cài đặt hoặc định cấu hình Công cụ tạo SDK.
NDK Không áp dụng 25.1.8937393 Cài đặt hoặc định cấu hình phiên bản khác của NDK.
JDK 17 17 Để tìm hiểu thêm, hãy xem phần cài đặt phiên bản JDK.

Bản vá đã phát hành

Dưới đây là danh sách các bản phát hành của bản vá cho Trình bổ trợ Android cho Gradle 8.0.

Trình bổ trợ Android cho Gradle 8.0.2 (tháng 5 năm 2023)

Để biết danh sách các lỗi được khắc phục trong AGP 8.0.2, hãy xem các vấn đề đã đóng của Android Studio 2022.2.1.

Trình bổ trợ Android cho Gradle 8.0.1 (tháng 5 năm 2023)

Bản cập nhật nhỏ này bao gồm các bản sửa lỗi sau:

Vấn đề đã khắc phục
Lỗi: "No VersionRequirement with the given id in the table" sau khi nâng cấp AGP 7.2.2 -> 7.4.0
Lỗi NullPointerException của R8 tại markTypeAsLive AGP 7.4.1
[R8 4.0.53] Lỗi xác minh lớp cứng trên Android 11

Thay đổi có thể gây lỗi: cần có không gian tên trong tập lệnh bản dựng cấp mô-đun

Bạn phải đặt không gian tên trong tệp build.gradle.kts cấp mô-đun, thay vì tệp kê khai. Bạn có thể bắt đầu sử dụng thuộc tính DSL namespace kể từ AGP 7.3. Để tìm hiểu thêm, hãy xem phần Đặt không gian tên.

Khi di chuyển sang DSL không gian tên, hãy lưu ý những vấn đề sau:

  • Các phiên bản trước của AGP sẽ dự đoán không gian tên kiểm thử từ không gian tên chính hoặc mã ứng dụng, không chính xác trong một số trường hợp. Trợ lý nâng cấp AGP sẽ chặn quá trình nâng cấp nếu thấy rằng không gian tên chính và không gian tên kiểm thử của dự án là giống nhau. Nếu quá trình nâng cấp bị chặn, bạn cần thay đổi testNamespace và sửa đổi mã nguồn theo cách thủ công cho phù hợp.
  • Sau khi bạn thay đổi không gian tên kiểm thử, có thể mã của bạn sẽ biên dịch được nhưng các hoạt động kiểm thử đo lường của bạn sẽ không thành công trong thời gian chạy. Điều này có thể xảy ra nếu mã nguồn kiểm thử đo lường tham chiếu đến một tài nguyên được xác định trong cả androidTest và nguồn ứng dụng.

Để biết thêm thông tin, hãy xem vấn đề #191813691 nhận xét #19.

Thay đổi có thể gây lỗi: giá trị mặc định của tuỳ chọn xây dựng

Kể từ AGP 8.0, các giá trị mặc định cho các cờ này đã thay đổi để cải thiện hiệu suất bản dựng. Để được trợ giúp điều chỉnh mã nhằm hỗ trợ một số thay đổi này, hãy sử dụng Trợ lý nâng cấp AGP (Tools > AGP Upgrade Assistant) (Công cụ > Trợ lý nâng cấp AGP). Trợ lý nâng cấp sẽ hướng dẫn bạn cập nhật mã để phù hợp với hành vi mới hoặc đặt cờ để duy trì hành vi trước đó.

Gắn cờ Giá trị mặc định mới Giá trị mặc định trước đó Ghi chú
android.defaults.buildfeatures.buildconfig false true AGP 8.0 không tạo BuildConfig theo mặc định. Bạn cần chỉ định tuỳ chọn này bằng cách sử dụng DSL trong các dự án mà bạn cần.
android.defaults.buildfeatures.aidl false true AGP 8.0 không bật tính năng hỗ trợ AIDL theo mặc định. Bạn cần chỉ định tuỳ chọn này bằng cách sử dụng DSL trong các dự án mà bạn cần. Cờ này dự kiến sẽ bị loại bỏ trong AGP 9.0.
android.defaults.buildfeatures.renderscript false true AGP 8.0 không bật tính năng hỗ trợ RenderScript theo mặc định. Bạn cần chỉ định tuỳ chọn này bằng cách sử dụng DSL trong các dự án mà bạn cần. Cờ này dự kiến sẽ bị loại bỏ trong AGP 9.0.
android.nonFinalResIds true false Theo mặc định, AGP 8.0 tạo các lớp R có các trường không phải cuối cùng.
android.nonTransitiveRClass true false AGP 8.0 tạo các lớp R cho những tài nguyên chỉ được xác định trong mô-đun hiện tại.
android.enableR8.fullMode true false Theo mặc định, AGP 8.0 sẽ bật chế độ đầy đủ cho R8. Để biết thêm thông tin chi tiết, hãy xem nội dung Chế độ đầy đủ của R8.

Thay đổi có thể gây lỗi: giá trị tuỳ chọn bản dựng được thực thi

Kể từ AGP 8.0, bạn sẽ không thể thay đổi giá trị cho các cờ này nữa. Nếu bạn chỉ định các giá trị đó trong tệp gradle.properties, thì giá trị đó sẽ bị bỏ qua và AGP sẽ in các cảnh báo.

Gắn cờ Giá trị thực thi Ghi chú
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 sẽ đưa ra cảnh báo nếu phát hiện thấy độ phân giải cấu hình trong giai đoạn cấu hình vì nó có tác động tiêu cực đến thời gian cấu hình Gradle.
android.r8.failOnMissingClasses true AGP 8.0 sẽ gặp lỗi trong các bản dựng sử dụng R8 nếu thiếu các lớp để đảm bảo tối ưu hoá DEX tốt hơn. Để giải quyết vấn đề này, bạn cần thêm các thư viện còn thiếu hoặc quy tắc lưu giữ -dontwarn. Để biết thêm thông tin chi tiết, hãy xem phần Thiếu cảnh báo lớp trong trình thu gọn R8.
android.testConfig.useRelativePath true Khi bật tính năng hỗ trợ sử dụng các tài nguyên, tài sản và tệp kê khai Android trong kiểm thử đơn vị, AGP 8.0 sẽ tạo một tệp test_config.properties chỉ chứa các đường dẫn tương đối. Điều này đảm bảo rằng các bài kiểm thử đơn vị Android luôn có thể sử dụng bộ nhớ đệm bản dựng Gradle.
android.useNewJarCreator true AGP sẽ sử dụng thư viện Zipflinger khi tạo tệp JAR để cải thiện hiệu suất bản dựng.
android.bundletool.includeRepositoriesInDependencyReport true Khi bật tính năng thêm thông tin phần phụ thuộc SDK trong AAB và APK, AGP 8.0 cũng sẽ thêm danh sách kho lưu trữ dự án vào thông tin này. Để tìm hiểu thêm, hãy xem bài viết Thông tin phần phụ thuộc dành cho Play Console.
android.enableArtProfiles true Các hồ sơ cơ sở hiện luôn được tạo. Hãy xem Hồ sơ cơ sở để biết thông tin chi tiết.
android.enableNewResourceShrinker true Sử dụng cách triển khai trình khám phá tài nguyên mới theo mặc định. Trình thu gọn tài nguyên mới hỗ trợ các tính năng động.
android.enableSourceSetPathsMap true Được dùng để tính toán các ánh xạ đường dẫn tài nguyên tương đối, vì vậy, các bản dựng Gradle được cập nhật thường xuyên hơn.
android.cacheCompileLibResources true Theo mặc định, các tài nguyên thư viện đã biên dịch hiện có thể được lưu vào bộ nhớ đệm vì Gradle theo dõi các tệp tài nguyên tương ứng với vị trí của dự án. Yêu cầu bật android.enableSourceSetPathsMap.
android.disableAutomaticComponentCreation true Theo mặc định, AGP 8.0 không tạo ra SoftwareComponent nào. Thay vào đó, AGP sẽ chỉ tạo SoftwareComponents cho các biến thể được định cấu hình để phát hành bằng DSL phát hành.

Cờ ổn định mới cho hồ sơ thực thi

AGP sẽ tích hợp cờ mới android.settings.executionProfile. Sử dụng cờ này để ghi đè hồ sơ thực thi mặc định của SettingsExtension. Để tìm hiểu thêm, hãy xem tài liệu về trình bổ trợ cài đặt.

Để xem trước các cờ thử nghiệm, hãy xem ghi chú phát hành bản thử nghiệm.

Không hỗ trợ chỉ định thuộc tính lazy Kotlin

Nếu bạn đang sử dụng Kotlin DSL của Gradle cho các tập lệnh bản dựng, hãy lưu ý rằng Android Studio và AGP 8.0 không hỗ trợ việc chỉ định thuộc tính thử nghiệm bằng cách sử dụng toán tử =. Để biết thêm thông tin về tính năng này, hãy xem ghi chú phát hànhtài liệu.

Danh mục nhiệm vụ của Trình phân tích bản dựng

Kể từ Android Studio Flamingo, Trình phân tích bản dựng sẽ có chế độ xem mặc định mới cho các tác vụ ảnh hưởng đến thời lượng bản dựng. Nếu dự án của bạn sử dụng AGP 8.0 trở lên, thay vì hiển thị riêng các tác vụ, Trình phân tích bản dựng sẽ nhóm các tác vụ đó theo danh mục. Ví dụ: các tác vụ cụ thể liên quan đến Tài nguyên Android, Kotlin hoặc Dexing sẽ được nhóm lại với nhau rồi sắp xếp theo thời lượng bản dựng. Điều này giúp bạn dễ dàng biết được danh mục nào có tác động lớn nhất đến thời gian xây dựng. Khi mở rộng từng danh mục, bạn sẽ thấy danh sách các nhiệm vụ tương ứng. Để hiển thị riêng từng việc cần làm mà không phân nhóm, hãy sử dụng trình đơn thả xuống Nhóm theo.

Danh mục nhiệm vụ của Trình phân tích bản dựng.

Trình bổ trợ cài đặt mới

AGP 8.0.0-alpha09 ra mắt trình bổ trợ cài đặt mới. Trình bổ trợ cài đặt cho phép bạn tập trung các cấu hình chung (các cấu hình áp dụng cho tất cả các mô-đun) ở cùng một nơi, nhờ đó bạn không cần sao chép và dán các cấu hình trong nhiều mô-đun. Ngoài ra, bạn có thể sử dụng trình bổ trợ cài đặt để tạo hồ sơ thực thi công cụ hoặc các hướng dẫn khác về cách chạy một công cụ và chuyển đổi giữa các hồ sơ đó.

Để sử dụng trình bổ trợ cài đặt, hãy áp dụng trình bổ trợ đó trong tệp settings.gradle:

apply plugin 'com.android.settings'

Tập trung các cấu hình chung

Để định cấu hình chung, hãy sử dụng khối android mới trong tệp settings.gradle. Ví dụ:

android {
  compileSdk 31
  minSdk 28
  ...
}

Hồ sơ thực thi công cụ

Trình bổ trợ cài đặt này cũng cho phép bạn tạo hồ sơ thực thi cho một số công cụ. Hồ sơ thực thi xác định cách chạy công cụ; bạn có thể chọn nhiều hồ sơ thực thi tuỳ thuộc vào môi trường. Trong hồ sơ thực thi, bạn có thể đặt các đối số JVM cho một công cụ và định cấu hình công cụ đó để chạy trong một quy trình riêng. Hiện tại, chúng tôi chỉ hỗ trợ công cụ R8.

Tạo hồ sơ thực thi và đặt hồ sơ thực thi mặc định trong tệp settings.gradle, như minh hoạ trong ví dụ sau:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Để ghi đè hồ sơ mặc định, hãy chọn một hồ sơ khác bằng cách sử dụng thuộc tính android.experimental.settings.executionProfile trong tệp gradle.properties:

android.experimental.settings.executionProfile=high

Bạn cũng có thể thiết lập thuộc tính này bằng cách sử dụng dòng lệnh, nhờ đó, bạn có thể thiết lập nhiều quy trình công việc. Ví dụ: nếu có quy trình tích hợp liên tục, bạn có thể sử dụng dòng lệnh để thay đổi hồ sơ thực thi mà không phải thay đổi tệp settings.gradle:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

Cần có JDK 17 để chạy AGP 8.0

Khi sử dụng Trình bổ trợ Android cho Gradle 8.0 để xây dựng ứng dụng, giờ đây, bạn bắt buộc phải cài JDK 17 để chạy được Gradle. Android Studio Flamingo gói JDK 17 và định cấu hình Gradle để sử dụng theo mặc định, nghĩa là hầu hết người dùng Android Studio không cần phải thay đổi cấu hình cho dự án.

Nếu cần thiết lập phiên bản JDK mà AGP sử dụng trong Android Studio theo cách thủ công, bạn cần sử dụng JDK 17 trở lên.

Khi sử dụng AGP độc lập với Android Studio, hãy nâng cấp phiên bản JDK bằng cách thiết lập biến môi trường JAVA_HOME hoặc tuỳ chọn dòng lệnh -Dorg.gradle.java.home vào thư mục cài đặt JDK 17.