Ghi chú phát hành Plugin Android cho Gradle

Kho lưu trữ JCenter chuyển sang chế độ chỉ đọc từ ngày 31 tháng 3 năm 2021. Để biết thêm thông tin, hãy xem nội dung Cập nhật dịch vụ JCenter.

Android Studio là một hệ thống xây dựng dựa trên Gradle còn Plugin Android cho Gradle bổ sung một số tính năng dành riêng cho việc xây dựng ứng dụng Android. Mặc dù Plugin Android thường được cập nhật ở dạng khoá trong Android Studio, nhưng trình bổ trợ này (và phần còn lại của hệ thống Gradle) có thể hoạt động độc lập và được cập nhật riêng.

Trang này giải thích cách cập nhật các công cụ Gradle cũng như nội dung các bản cập nhật gần đây.

Để đọc toàn bộ tóm tắt quan trọng về những thay đổi có thể gây lỗi sắp tới trong Plugin Android cho Gradle, vui lòng xem lộ trình phát triển Plugin Android cho Gradle.

Để biết thông tin chi tiết về cách định cấu hình bản dựng Android bằng Gradle, hãy xem các trang sau:

Để biết thêm thông tin về hệ thống xây dựng Gradle, hãy xem nội dung Hướng dẫn sử dụng Gradle.

Cập nhật Plugin Android cho Gradle

Khi cập nhật Android Studio, bạn có thể nhận được lời nhắc tự động cập nhật Plugin Android cho Gradle lên phiên bản mới nhất. Bạn có thể chọn chấp nhận bản cập nhật hoặc chỉ định một phiên bản theo cách thủ công dựa trên yêu cầu bản dựng của dự án.

Bạn có thể chỉ định phiên bản trình bổ trợ trongFile (Tệp) >Project Structure (Cấu trúc dự án) >Project (Dự án) trong Android Studio hoặc tệp build.gradle cấp cao nhất. Phiên bản trình bổ trợ này áp dụng cho mọi mô-đun được tạo trong dự án Android Studio đó. Ví dụ sau đây sẽ thiết lập trình bổ trợ thành phiên bản 7.2 trong tệp build.gradle:

Groovy

plugins {
    id 'com.android.application' version '7.2' apply false
    id 'com.android.library' version '7.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.31' apply false
}

Kotlin

plugins {
    id("com.android.application") version "7.2" apply false
    id("com.android.library") version "7.2" apply false
    id("org.jetbrains.kotlin.android") version "1.5.31" apply false
}

Thận trọng: Bạn không nên sử dụng các phần phụ thuộc động trong số phiên bản, chẳng hạn như 'com.android.tools.build:gradle:2.+'. Việc sử dụng tính năng này có thể gây ra tình trạng cập nhật phiên bản không mong muốn và gây khó khăn cho việc phân biệt phiên bản.

Nếu phiên bản trình bổ trợ đã chỉ định chưa được tải xuống, Gradle sẽ tải phiên bản này xuống vào lần tiếp theo bạn tạo dự án hoặc nhấp vàoFile (Tệp) >Sync Project with Gradle Files (Đồng bộ hoá dự án với tệp Gradle) qua thanh trình đơn trong Android Studio.

Cập nhật Gradle

Khi cập nhật Android Studio, bạn có thể nhận được lời nhắc cập nhật Gradle lên phiên bản mới nhất. Bạn có thể chọn chấp nhận bản cập nhật hoặc chỉ định một phiên bản theo cách thủ công dựa trên yêu cầu bản dựng của dự án.

Bảng sau đây liệt kê phiên bản Gradle cần thiết cho mỗi phiên bản của Plugin Android cho Gradle. Để đạt hiệu quả tối đa, bạn nên sử dụng phiên bản mới nhất có thể của cả Gradle và trình bổ trợ.

Phiên bản trình bổ trợPhiên bản Gradle bắt buộc
1.0.0 – 1.1.32.2.1 – 2.3
1.2.0 – 1.3.12.2.1 – 2.9
1.5.02.2.1 – 2.13
2.0.0 – 2.1.22.10 – 2.13
2.1.3 – 2.2.32.14.1 – 3.5
2.3.0 trở lên3.3 trở lên
3.0.0 trở lên4.1 trở lên
3.1.0 trở lên4.4 trở lên
3.2.0 – 3.2.14.6 trở lên
3.3.0 – 3.3.34.10.1 trở lên
3.4.0 – 3.4.35.1.1 trở lên
3.5.0 – 3.5.45.4.1 trở lên
3.6.0 – 3.6.45.6.4 trở lên
4.0.0 trở lên6.1.1 trở lên
4.1.0 trở lên6.5 trở lên
4.2.0 trở lên6.7.1 trở lên
7.07.0 trở lên
7.17.2 trở lên
7.27.3 trở lên

Bạn có thể chỉ định phiên bản Gradle trong trình đơn File (Tệp) > Project Structure (Cấu trúc dự án) > Project (Dự án) trong Android Studio hoặc bằng cách chỉnh sửa tham chiếu phân phối Gradle trong tệp gradle/wrapper/gradle-wrapper.properties. Ví dụ sau đây sẽ thiết lập phiên bản Gradle thành 7.4.2 trong tệp gradle-wrapper.properties.

...
distributionUrl = "https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip"
...

Trình bổ trợ Android cho Gradle và khả năng tương thích với Android Studio

Android Studio là một hệ thống xây dựng dựa trên Gradle, còn trình bổ trợ Android cho Gradle bổ sung một số tính năng dành riêng cho việc xây dựng ứng dụng Android. Bảng sau đây liệt kê yêu cầu về phiên bản trình bổ trợ Android cho Gradle đối với từng phiên bản Android Studio.

Phiên bản Android Studio Phiên bản trình bổ trợ yêu cầu
Arctic Fox | 2020.3.1 3.1-7.0
Bumblebee | 2021.1.1 3.2-7.1
Chipmunk | 2021.2.1 3.2-7.2

Để biết thông tin về các tính năng mới trong trình bổ trợ Gradle trên Android, hãy xem ghi chú phát hành của trình bổ trợ Android cho Gradle.

Thay đổi về phiên bản (tháng 11 năm 2020)

Chúng tôi đang cập nhật cách đánh số phiên bản cho Plugin Android cho Gradle (AGP) để phù hợp hơn với công cụ bản dựng Gradle cơ bản.

Sau đây là những thay đổi đáng chú ý:

  • AGP sẽ sử dụng phiên bản ngữ nghĩa và các thay đổi có thể gây lỗi sẽ dành cho các bản phát hành chính.

  • Sẽ có một phiên bản lớn của AGP được phát hành mỗi năm, phù hợp với bản phát hành chính của Gradle.

  • Bản phát hành sau AGP 4.2 sẽ là phiên bản 7.0 và yêu cầu phải nâng cấp lên Gradle phiên bản 7.x. Mọi bản phát hành chính của AGP sẽ yêu cầu nâng cấp phiên bản lớn trong công cụ Gradle cơ bản.

  • Các API sẽ không được sử dụng nữa trước khoảng 1 năm, đồng thời ra mắt chức năng thay thế. API không còn được dùng nữa sẽ bị xóa vào khoảng một năm sau trong lần cập nhật chính tiếp theo.

7.2.0 (tháng 5 năm 2022)

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

Cảnh báo của Jetifer và kiểm tra trong Trình phân tích bản dựng

Trình phân tích bản dựng hiện hiển thị cảnh báo nếu tệp gradle.properties của dự án bao gồm android.enableJetifier=true. Cờ này được ra mắt trong phiên bản Android Studio trước đó để bật AndroidX cho các thư viện không hỗ trợ sẵn AndroidX. Tuy nhiên, hệ sinh thái thư viện chủ yếu đã chuyển sang hỗ trợ AndroidX nguyên gốc và cờ Jetifier có thể không còn cần thiết cho dự án của bạn nữa. Ngoài ra, cờ có thể khiến hiệu suất tạo bản dựng chậm hơn. Nếu thấy cảnh báo này, bạn có thể chạy quy trình kiểm tra trong Trình phân tích bản dựng để xác nhận xem có thể xóa cờ hay không.

Hỗ trợ môi trường thử nghiệm cố định

Bắt đầu với Android Studio Chipmunk Beta 1, Android Studio hỗ trợ cả môi trường thử nghiệm cố định Android và Java. Xem hướng dẫn của Gradle về cách sử dụng môi trường thử nghiệm cố định để biết thêm thông tin về tính năng thử nghiệm cố định và cách sử dụng chúng trong một dự án Java.

Để bật thử nghiệm cố định trong mô-đun thư viện Android, hãy thêm thông tin sau vào tệp build.gradle cấp thư viện:

android {
    testFixtures {
        enable true

        // enable testFixtures's android resources (disabled by default)
        // androidResources true
    }
}

Theo mặc định, việc xuất bản thư viện của bạn đồng thời cũng là xuất bản các môi trường thử nghiệm cố định AAR với thư viện chính. Tệp Siêu dữ liệu mô-đun Gradle sẽ chứa thông tin để Gradle có thể sử dụng cấu phần phần mềm phù hợp khi yêu cầu thành phần testFixtures.

Để tắt tính năng xuất bản môi trường thử nghiệm cố định AAR của một thư viện trong biến thể bản phát hành, hãy thêm nội dung sau đây vào tệp build.gradle cấp thư viện:

afterEvaluate {
    components.release.withVariantsFromConfiguration(
        configurations.releaseTestFixturesVariantReleaseApiPublication) { skip() }
    components.release.withVariantsFromConfiguration(
        configurations.releaseTestFixturesVariantReleaseRuntimePublication) { skip() }
}

Để sử dụng môi trường thử nghiệm cố định AAR của một thư viện Android đã xuất bản, bạn có thể sử dụng phương thức trợ giúp testFixtures() của Gradle.

dependencies {
    testImplementation testFixtures('com.example.company:publishedLib:1.0')
}

Theo mặc định, việc tìm lỗi mã nguồn sẽ phân tích các nguồn thử nghiệm cố định. Bạn có thể định cấu hình tìm lỗi mã nguồn để bỏ qua các nguồn thử nghiệm cố định như sau:

android {
    lint {
        ignoreTestFixturesSources true
    }
}

7.1.0 (tháng 1 năm 2022)

Plugin Android cho Gradle 7.1.0 là một bản phát hành lớn bao gồm nhiều tính năng và điểm cải thiện mới.

7.1.3 (Tháng Tư 2022)

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

  • Các vấn đề trùng lặp về lớp do R8 báo cáo

Để đọc danh sách toàn bộ bản sửa lỗi có trong bản phát hành này, hãy xem Bài đăng blog về Bản vá 3 của Android Studio Bumblebee.

7.1.2 (tháng 2 năm 2022)

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

  • Plugin Android cho Gradle 7.1.0-rc01 không thực hiện được việc biến đổi mã byte ASM trong quá trình kiểm thử đơn vị
  • Tính năng đồng bộ hoá Gradle không hoạt động với thông báo "Unable to load class "com.android.build.api.extensions.AndroidComponentsExtension"" (Không tải được lớp "com.android.build.api.extension.AndroidComponentsExtension").
  • Không sử dụng được một số khối DSL mới qua Groovy DSL trong Plugin Android cho Gradle 7.0.0
  • AGP 7.1 phát hành API mới: không ký jardoc jar đã tạo
  • ClassesDataSourceCache phải sử dụng phiên bản Asm mới nhất
  • Android Studio BumbleBee không phải lúc nào cũng triển khai các thay đổi mới nhất

Để đọc danh sách toàn bộ bản sửa lỗi có trong bản phát hành này, hãy xem bài đăng trên blog về Bản vá 2 của Android Studio Bumblebee.

7.1.1 (tháng 2 năm 2022)

Bản cập nhật nhỏ này tương ứng với việc phát hành Bản vá 1 của Android Studio Bumblebee.

Để đọc danh sách bản sửa lỗi có trong bản phát hành này, hãy xem bài đăng trên blog về Bản vá 1 của Android Studio Bumblebee.

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 7.2 7.2 Để 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.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 21.4.7075529 Cài đặt hoặc định cấu hình phiên bản khác của NDK.
JDK 11 11 Để tìm hiểu thêm, hãy xem nội dung cài đặt phiên bản JDK.

Tác vụ phân tích tìm lỗi mã nguồn hiện đã lưu được vào bộ nhớ đệm

AndroidLintAnalysisTask hiện đã tương thích với bộ nhớ đệm bản dựng Gradle. Nếu bạn bật bộ nhớ đệm bản dựng bằng cách thiết lập org.gradle.caching=true trong tệp gradle.properties, tác vụ phân tích tìm lỗi mã nguồn sẽ nhận được kết quả qua bộ nhớ đệm bản dựng ngay khi có thể.

Tác vụ phân tích tìm lỗi mã nguồn thường là nút thắt cổ chai lớn nhất khi chạy tìm lỗi mã nguồn bằng Plugin Android cho Gradle. Vì vậy, việc bật bộ nhớ đệm bản dựng sẽ giúp cải thiện tốc độ bản dựng khi chạy tìm lỗi mã nguồn trong nhiều trường hợp. Nhờ đó, chẳng hạn như nếu có một dự án nhiều mô-đun và cần dọn sạch thư mục bản dựng trước khi chạy tìm lỗi mã nguồn trên máy chủ tích hợp liên tục (CI), bạn sẽ thấy hiệu suất cải thiện đáng kể.

Các mô-đun C/C++ hiện có thể tham chiếu các mô-đun C/C++ khác trong cùng dự án

Giờ đây, mô-đun Android trên Gradle có mã C/C++ có thể được thiết lập để tham chiếu đến các tệp tiêu đề và mã thư viện trong một mô-đun Gradle khác. Giao thức Prefab được dùng để giao tiếp tiêu đề và thư viện giữa các mô-đun Gradle.

Yêu cầu

  • Mô-đun tiêu thụ phải là CMake chứ không phải ndk-build. Việc hỗ trợ tạo bản dựng ndk- sẽ yêu cầu cập nhật NDK trong tương lai. Mô-đun phát hành có thể là CMake hoặc ndk-build.

  • Mô-đun tiêu thụ phải bật prefab trong tệp build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • Mô-đun phát hành phải bật prefabPublishing trong tệp build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Mô-đun tiêu thụ phải tham chiếu đến mô-đun phát hành bằng cách bổ sung dòng trong tệp build.gradle khối dependencies. Ví dụ:
dependencies {
  implementation project(':mylibrary')
}
  • Mô-đun phát hành phải cho thấy một gói bằng mục prefab. Ví dụ:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • Tệp CMakeLists.txt của mô-đun tiêu thụ có thể sử dụng find_package() để tìm gói do mô-đun sản xuất phát hành. Ví dụ:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
        myapplication
        mylibrary::mylibrary)
   android {
defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

Để hiểu thêm về cách dùng AGP để định cấu hình cho người tiêu dùng và nhà sản xuất AAR gốc, hãy xem nội dung Các phần phụ thuộc gốc với AGP.

Cài đặt kho lưu trữ trong tệp settings.gradle

Khi một dự án mới được tạo trong Android Studio Bumblebee, tệp build.gradle cấp cao nhất sẽ chứa khối plugins, theo sau là mã để dọn dẹp thư mục bản dựng:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}

task clean(type: Delete) {
  delete rootProject.buildDir
}

Chế độ cài đặt kho lưu trữ trước đây nằm trong tệp build.gradle cấp cao nhất giờ đây nằm trong tệp settings.gradle:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}

dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

Tệp build.gradle cấp mô-đun chưa thay đổi. Vì vậy, hãy sử dụng tệp build.gradle cấp cao nhất và tệp settings.gradle để xác định cấu hình bản dựng áp dụng cho tất cả mô-đun trong dự án hoặc kho lưu trữ và các phần phụ thuộc áp dụng cho Gradle; sử dụng tệp build.gradle cấp mô-đun để xác định cấu hình bản dựng dành riêng cho một mô-đun cụ thể trong dự án.

Improved resource shrinker

Android Studio Bumblebee có một trình thu gọn tài nguyên được cải thiện nhằm giúp giảm kích thước ứng dụng.

Hỗ trợ ứng dụng có tính năng động

Chế độ triển khai mặc định cho trình thu gọn tài nguyên Android đã được cập nhật trong Plugin Android cho Gradle 7.1.0-alpha09. Cách triển khai mới hỗ trợ việc thu nhỏ ứng dụng có tính năng động.

Thử nghiệm việc tăng mức độ giảm kích thước ứng dụng

Việc triển khai trình thu gọn tài nguyên mới có thể làm giảm kích thước hơn nữa của ứng dụng vốn đã được thu gọn cách sửa đổi bảng tài nguyên để xoá tài nguyên giá trị không dùng đến cũng như xoá tham chiếu đến tài nguyên tệp không dùng đến. Trình khám phá tài nguyên mới có thể xoá hoàn toàn các tài nguyên tệp không dùng đến, giúp giảm kích thước ứng dụng hơn nữa. Theo mặc định, chế độ này chưa được bật, nhưng bạn có thể chọn dùng thử bằng cách bổ sungtuỳ chọn thử nghiệm android.experimental.enableNewResourceShrinker.preciseShrinking=true vào tệp gradle.properties của dự án.

Vui lòng báo cáo mọi vấn đề bạn phát hiện được với trình thu gọn tài nguyên hoặc cờ thử nghiệm mới. Để giúp chẩn đoán các vấn đề hoặc sử dụng như một giải pháp tạm thời, bạn có thể chuyển về phương thức triển khai trước đó bằng cách thêm android.enableNewResourceShrinker=false vào gradle.properties của dự án. Trình thu gọn mới sẽ thay thế các tệp tài nguyên không dùng đến bằng các tệp tối thiểu, khác một chút so với trình thu gọn tài nguyên trước đó. Tuy vậy, thao tác này có thể sẽ không ảnh hưởng đến thời gian chạy.

Quy trình triển khai cũ được lên lịch xoá trong Plugin Android cho Gradle 8.0.0.

Phát hành biến thể xây dựng

Plugin Android cho Gradle 7.1.0 trở lên cho phép bạn chọn định cấu hình biến thể xây dựng nào để phát hành lên một kho lưu trữ Apache Maven. AGP sẽ tạo một thành phần bằng một hoặc nhiều biến thể xây dựng dựa trên DSL phát hành mới. Bạn có thể sử dụng thành phần này để tuỳ chỉnh ấn bản vào kho lưu trữ Maven. So với các phiên bản trước, tính năng này cũng tránh các thao tác không cần thiết vì theo mặc định, sẽ không có thành phần nào được tạo. Để tìm hiểu thêm, hãy xem nội dung phát hành mã mẫu.

Phát hành tệp JAR Javadoc

AGP 7.1.0 trở lên cho phép bạn tạo Javadoc qua nguồn Java và Kotlin, đồng thời phát hành các tệp JAR Javadoc ngoài tệp Android Archive (AAR) cho dự án thư viện. Javadoc được bổ sung vào tệp POM và Siêu dữ liệu mô-đun Gradle. Bật tính năng này bằng cách bổ sung withJavadocJar() trong khối phát hành singleVariant hoặc multipleVariants. Để tìm hiểu thêm, hãy xem nội dung tuỳ chọn phát hành mã mẫu.

Phát hành tệp JAR nguồn

AGP 7.1.0 trở lên cho phép bạn phát hành các tệp JAR của nguồn Java và Kotlin ngoài các tệp AAR cho các dự án thư viện. Các nguồn này được bổ sung vào tệp POM và Siêu dữ liệu mô-đun Gradle. Bạn có thể bật tính năng này bằng cách thêm withSourcesJar() trong khối phát hành singleVariant hoặc multipleVariants. Để tìm hiểu thêm, hãy xem nội dung tuỳ chọn phát hành mã mẫu.

Thay đổi ngữ nghĩa của khối tìm lỗi mã nguồn

Tất cả phương pháp tìm lỗi mã nguồn sẽ ghi đè mức độ nghiêm trọng có sẵn của một vấn đề – enable, disable/ignore, informational, warning, error, fatal — hiện đã tuân theo thứ tự cấu hình. Ví dụ: giờ đây thao tác thiết lập một vấn đề nghiêm trọng trong finalizeDsl() sẽ ghi đè thao tác vô hiệu hoá vấn đề này trong DSL chính. Để biết thêm thông tin, hãy xem tài liệu tham khảo về quy tắc khối lint{} cũng như quy trình tạo bản dựng và điểm mở rộng dành cho Android.

Các API AGP mà plugin Navigation Safe Args cho Gradle phụ thuộc vào đã bị xoá. AGP 7.1 không hoạt động được trên Navigation Safe Args phiên bản 2.4.0-rc1 hoặc 2.4.0, nhưng sẽ hoạt động được trên phiên bản 2.5.0-alpha01 và 2.4.1. Trong thời gian chờ đợi, như một giải pháp để giải quyết vấn đề này, bạn có thể sử dụng AGP 7.1 với bản dựng của Navigation Safe Args, Navigation 2.5.0-SNAPSHOT Để sử dụng bản dựng tổng quan nhanh (snapshot), hãy làm theo hướng dẫn về tổng quan nhanh với mã bản dựng #8054565.

Ngoài ra, Navigation Safe Args phiên bản 2.4.1 và 2.5.0 sẽ không còn hoạt động được với AGP 4.2; để sử dụng các phiên bản Safe Args đó, bạn phải sử dụng AGP 7.0 trở lên.

Vô hiệu hoá chế độ tạo thành phần tự động

Kể từ AGP 8.0, theo mặc định tính năng tạo thành phần tự động sẽ được vô hiệu hoá. Hiện tại, AGP 7.1 sẽ tự động tạo một thành phần cho mỗi biến thể xây dựng có cùng tên với biến thể xây dựng, và một thành phần all chứa mọi biến thể xây dựng. Tính năng tạo thành phần tự động này sẽ được vô hiệu hoá. Để chuyển sang hành vi mới, bạn nên vô hiệu hoá tính năng tạo thành phần tự động bằng cách thiết lập android.disableAutomaticComponentCreation thành true.. Để biết thêm thông tin, hãy xem nội dung Sử dụng trình bổ trợ Maven Publish.

Khả năng tương thích với tính năng Giám sát hiệu suất Firebase

AGP 7.1 không tương thích với trình bổ trợ Giám sát hiệu suất Firebase cho Gradle phiên bản 1.4.0 trở xuống. Trình hỗ trợ nâng cấp AGP sẽ không tự động cập nhật trình bổ trợ lên phiên bản 1.4.1, vì vậy, nếu đang sử dụng firebase-perf và muốn nâng cấp AGP lên 7.1, bạn cần nâng cấp lên phiên bản cụ thể này theo cách thủ công.

Vấn đề đã biết

Mục này mô tả các vấn đề đã biết còn tồn tại trong Plugin Android cho Gradle 7.1.0.

Vấn đề khi kiểm thử đơn vị một dự án ứng dụng có sử dụng trình bổ trợ Hilt

Classpath kiểm thử đơn vị chứa các lớp ứng dụng không được đo lường, nghĩa là Hilt không đo lường lớp ứng dụng để xử lý quá trình chèn phần phụ thuộc khi chạy kiểm thử đơn vị.

Sự cố này sẽ được khắc phục trong bản phát hành 7.1.1, hãy xem nội dung vấn đề #213534628.

7.0.0 (tháng 7 năm 2021)

Plugin Android cho Gradle 7.0.0 là một bản phát hành lớn bao gồm nhiều tính năng và điểm cải thiện mới.

7.0.1 (tháng 8 năm 2021)

Bản cập nhật nhỏ này gồm một số bản sửa lỗi. Để xem danh sách những bản sửa lỗi đáng chú ý, hãy đọc bài đăng liên quan trên blog Thông tin cập nhật về bản phát hành.

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 7.0.2 7.0.2 Để 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.
JDK 11 11 Để tìm hiểu thêm, hãy xem nội dung cài đặt phiên bản JDK.

Cần có JDK 11 để chạy AGP 7.0

Khi sử dụng Plugin Android cho Gradle 7.0 để xây dựng ứng dụng, giờ đây bạn bắt buộc phải có JDK 11 để chạy được Gradle. Android Studio Arctic Fox có gói JDK 11 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 11 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 tuỳ chọn 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 11.

Variant API đã ổn định

Variant API mới hiện đã ổn định. Hãy cùng xem các giao diện mới trong gói com.android.build.api.variant và các ví dụ trong dự án GitHub gradle-recipes. Chúng tôi đã cung cấp một số tệp trung gian là một phần của Variant API mới, gọi là cấu phần phần mềm, thông qua giao diện Artifacts (Cấu phần phần mềm). Bạn có thể lấy và tuỳ chỉnh các cấu phần phần mềm này (tương tự như tập kê khai sáp nhập) bằng cách sử dụng trình bổ trợ và mã của bên thứ ba.

Chúng tôi sẽ tiếp tục mở rộng Variant API bằng cách bổ sung các chức năng mới và tăng cường số lượng cấu phần phần mềm trung gian mà chúng tôi cung cấp cho hoạt động tuỳ chỉnh.

Thay đổi về hành vi của trình tìm lỗi mã nguồn

Phần này mô tả nhiều thay đổi về hành vi của trình tìm lỗi mã nguồn trong Plugin Android cho Gradle 7.0.0.

Cải thiện trình tìm lỗi mã nguồn cho phần phụ thuộc của thư viện

Quá trình chạy trình tìm lỗi mã nguồn bằng checkDependencies = true giờ đây nhanh hơn trước. Đối với các dự án Android bao gồm một ứng dụng có các phần phụ thuộc vào thư viện, bạn nên thiết lập checkDependencies thành true như bên dưới rồi chạy trình tìm lỗi mã nguồn qua ./gradlew :app:lint. Chế độ này sẽ phân tích song song tất cả mô-đun phần phụ thuộc và tạo ra một báo cáo duy nhất bao gồm các vấn đề từ ứng dụng và tất cả phần phụ thuộc.

Groovy

// build.gradle

android {
  ...
  lintOptions {
    checkDependencies true
  }
}

Kotlin

// build.gradle.kts

android {
  ...
  lint {
    isCheckDependencies = true
  }
}

Giờ đây tác vụ của trình tìm lỗi mã nguồn có thể được CẬP NHẬT

Nếu các nguồn và tài nguyên của một mô-đun không thay đổi, thì tác vụ phân tích trình tìm lỗi mã nguồn cho mô-đun đó không cần phải chạy lại. Khi điều này xảy ra, thao tác thực thi tác vụ sẽ xuất hiện dưới dạng "UP-TO-DATE" (cập nhật) trong đầu ra của Gradle. Với sự thay đổi này, khi chạy trình tìm lỗi mã nguồn (lint) trên một mô-đun ứng dụng có checkDependencies = true, chỉ những mô-đun đã thay đổi mới cần chạy bản phân tích. Do đó, trình tìm lỗi mã nguồn có thể chạy nhanh hơn nữa.

Tác vụ báo cáo tìm lỗi mã nguồn cũng không cần chạy nếu dữ liệu đầu vào của liên kết không thay đổi. Một vấn đề đã biết liên quan là khi tác vụ tìm lỗi mã nguồn xuất hiện dưới dạng UP-TO-DATE, không có kết quả văn bản tìm lỗi mã nguồn được in tại stdout (vấn đề #191897708).

Chạy trình tìm lỗi mã nguồn cho các mô-đun có tính năng động

AGP không còn hỗ trợ việc chạy trình tìm lỗi mã nguồn qua các mô-đun tính năng động. Việc chạy trình tìm lỗi mã nguồn qua mô-đun ứng dụng tương ứng sẽ chạy trình tìm lỗi mã nguồn trên các mô-đun tính năng động của ứng dụng và đưa tất cả sự cố vào báo cáo tìm lỗi mã nguồn của ứng dụng. Có một vấn đề đã biết liên quan là khi chạy Trình tìm lỗi mã nguồn với checkDependencies = true qua một mô-đun ứng dụng, các phần phụ thuộc vào thư viện tính năng động sẽ không được kiểm tra trừ phi các phần phụ thuộc đó cũng là phần phụ thuộc ứng dụng (vấn đề #191977888).

Chỉ chạy trình tìm lỗi mã nguồn trên biến thể mặc định

Hiện tại, việc chạy ./gradlew :app:lint chỉ chạy trình tìm lỗi mã nguồn cho biến thể mặc định. Trong các phiên bản AGP trước đây, thuộc tính này sẽ chạy trình tìm lỗi mã nguồn trên tất cả biến thể.

Thiếu cảnh báo lớp trong trình rút gọn mã R8

R8 xử lý nhất quán và chính xác hơn đối với các lớp bị thiếu, cũng như tuỳ chọn -dontwarn. Do đó, bạn nên bắt đầu đánh giá các cảnh báo về lớp bị thiếu mà R8 đưa ra.

Khi R8 gặp phải một tham chiếu lớp không được xác định trong ứng dụng hoặc một trong các phần phụ thuộc của ứng dụng đó, ứng dụng sẽ phát ra cảnh báo xuất hiện trong đầu ra của bản dựng. Ví dụ:

R8: Missing class: java.lang.instrument.ClassFileTransformer

Cảnh báo này có nghĩa là bạn không thể tìm thấy định nghĩa lớp java.lang.instrument.ClassFileTransformer khi phân tích mã của ứng dụng. Mặc dù điều này thường có nghĩa là đã xảy ra lỗi, nhưng bạn có thể bỏ qua cảnh báo này. Có hai lý do phổ biến khiến bạn bỏ qua cảnh báo:

  1. Các thư viện nhắm mục tiêu JVM và lớp bị thiếu đều thuộc kiểu thư viện JVM (như ví dụ trên).

  2. Một trong các phần phụ thuộc sử dụng API chỉ có thời gian biên dịch.

Bạn có thể bỏ qua cảnh báo lớp bị thiếu bằng cách bổ sung quy tắc -dontwarn vào tệp proguard-rules.pro. Ví dụ:

-dontwarn java.lang.instrument.ClassFileTransformer

Để thuận tiện, AGP sẽ tạo một tệp chứa tất cả quy tắc có thể bị thiếu, ghi các quy tắc này vào một đường dẫn tệp như sau: app/build/outputs/mapping/release/missing_rules.txt. Bổ sung các quy tắc vào tệp proguard-rules.pro của bạn để bỏ qua cảnh báo.

Trong AGP 7.0, các thông báo về lớp bị thiếu sẽ xuất hiện dưới dạng cảnh báo và bạn có thể chuyển các thông báo đó thành lỗi bằng cách thiết lập android.r8.failOnMissingClasses = true trong gradle.properties. Trong AGP 8.0, các cảnh báo này sẽ trở thành lỗi phá vỡ bản dựng. Bạn có thể giữ nguyên hành vi AGP 7.0 bằng cách bổ sung tuỳ chọn -ignorewarnings vào tệp proguard-rules.pro. Tuy nhiên, bạn không nên thực hiện thao tác này.

Xoá bộ nhớ đệm bản dựng Plugin Android cho Gradle

Bộ nhớ đệm bản dựng AGP đã bị xoá trong AGP 4.1. Ra mắt trong AGP 2.3 trước đây để bổ sung cho bộ nhớ đệm bản dựng Gradle, bộ nhớ đệm bản dựng AGP đã được thay thế hoàn toàn bằng bộ nhớ đệm bản dựng Gradle trong AGP 4.1. Thay đổi này không ảnh hưởng đến thời gian tạo bản dựng.

Trong AGP 7.0, thuộc tính android.enableBuildCache, thuộc tính android.buildCacheDir và tác vụ cleanBuildCache đã bị xoá.

Sử dụng mã nguồn Java 11 trong dự án

Hiện bạn có thể biên dịch tối đa đến mã nguồn Java 11 trong dự án ứng dụng, cho phép bạn sử dụng các tính năng ngôn ngữ mới hơn như phương thức giao diện riêng tư, toán tử diamond cho các lớp ẩn danh và cú pháp biến cục bộ cho các tham số lambda.

Để bật tính năng này, hãy thiết lập compileOptions thành phiên bản Java mong muốn và thiết lập compileSdkVersion thành 30 trở lên:

Groovy

// build.gradle

android {
    compileSdkVersion 30

    compileOptions {
      sourceCompatibility JavaVersion.VERSION_11
      targetCompatibility JavaVersion.VERSION_11
    }

    // For Kotlin projects
    kotlinOptions {
      jvmTarget = "11"
    }
}

Kotlin

// build.gradle.kts

android {
    compileSdkVersion(30)

    compileOptions {
      sourceCompatibility(JavaVersion.VERSION_11)
      targetCompatibility(JavaVersion.VERSION_11)
    }

    kotlinOptions {
      jvmTarget = "11"
    }
}

Xoá cấu hình phần phụ thuộc

Trong AGP 7.0, những cấu hình sau (hoặc phạm vi phụ thuộc) đã bị xoá:

  • compile
    Tuỳ vào trường hợp sử dụng, thành phần này đã được thay thế bằng api hoặc implementation.
    Cũng áp dụng cho các biến thể *Compile (*Biên dịch), ví dụ: debugCompile.
  • provided
    Tính năng này đã được thay thế bằng compileOnly.
    Cũng áp dụng cho các biến thể *Provided (*Được cung cấp), ví dụ: releaseProvided.
  • apk
    Tính năng này đã được thay thế bằng runtimeOnly.
  • publish
    Tính năng này đã được thay thế bằng runtimeOnly.

Trình Hỗ trợ nâng cấp AGP sẽ tự động di chuyển dự án sang các cấu hình mới trong hầu hết trường hợp.

Classpath thay đổi khi biên dịch bằng Plugin Android cho Gradle

Nếu bạn đang biên dịch bằng Plugin Android cho Gradle, thì classpath biên dịch có thể thay đổi. Vì AGP hiện sử dụng nội bộ các cấu hình api/implementation, nên một số cấu phần phần mềm có thể bị xoá khỏi classpath biên dịch. Nếu bạn cần phần phụ thuộc AGP tại thời điểm biên dịch, hãy nhớ bổ sung phần phụ thuộc trên làm phần phụ thuộc rõ ràng.

Không hỗ trợ bổ sung thư viện gốc trong thư mục tài nguyên Java

Trước đây, bạn có thể bổ sung thư viện gốc vào thư mục tài nguyên Java và đăng ký thư mục đó bằng android.sourceSets.main.resources.srcDirs sao cho thư viện gốc sẽ được trích xuất và bổ sung vào tệp APK cuối cùng. Kể từ AGP 7.0, định dạng này không còn được hỗ trợ và các thư viện gốc trong thư mục tài nguyên Java sẽ bị bỏ qua. Thay vào đó, hãy sử dụng phương thức DSL dành cho thư viện gốc android.sourceSets.main.jniLibs.srcDirs. Để biết thêm thông tin, hãy xem nội dung cách định cấu hình nhóm tài nguyên.

Vấn đề đã biết

Phần này mô tả các vấn đề đã biết còn tồn tại trong Plugin Android cho Gradle 7.0.0.

Tình trạng không tương thích với trình bổ trợ đa nền tảng Kotlin 1.4.x

Plugin Android cho Gradle 7.0.0 tương thích với trình bổ trợ đa nền tảng Kotlin 1.5.0 trở lên. Các dự án sử dụng dịch vụ hỗ trợ đa nền tảng Kotlin cần cập nhật lên Kotlin 1.5.0 để sử dụng được Plugin Android cho Gradle 7.0.0. Để khắc phục, bạn có thể hạ cấp trình bổ trợ Android cho Gradle xuống 4.2.x, mặc dù bạn không nên thực hiện việc này.

Để biết thêm thông tin, hãy xem nội dung KT-43944.

Thiếu đầu ra trình tìm lỗi mã nguồn

Khi tác vụ tìm lỗi mã nguồn đã cập nhật, không có đầu ra văn bản tìm lỗi mã nguồn nào được in tại stdout (vấn đề #191897708). Để biết thêm ngữ cảnh, hãy xem nội dung Thay đổi về hành vi đối với trình tìm lỗi mã nguồn. Vấn đề này sẽ được khắc phục trong Plugin Android cho Gradle 7.1.

Trình tìm lỗi mã nguồn không kiểm tra toàn bộ phần phụ thuộc của thư viện có tính năng động

Khi chạy trình tìm lỗi mã nguồn với checkDependencies = true qua một mô-đun ứng dụng, phần phụ thuộc thư viện tính năng động sẽ không được kiểm tra trừ khi đó cũng là phần phụ thuộc ứng dụng (vấn đề #191977888). Để khắc phục vấn đề này, bạn có thể chạy tác vụ tìm lỗi mã nguồn trên các thư viện đó. Để biết thêm ngữ cảnh, hãy xem nội dung Thay đổi về hành vi đối với trình tìm lỗi mã nguồn.

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 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 Plugin 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:

Groovy

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

Kotlin

// 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ụ Plugin 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

Plugin 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 bổ sung các thuộc tính sau vào tệp build.gradle hoặc build.gradle.kts ở cấp mô-đun:

Groovy

// build.gradle

android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}

Kotlin

// 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 Plugin 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 luồ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ừ projectDir/gradle.properties, projectDir/app/gradle.properties, projectDir/library/gradle.properties, v.v. Đối với các mô-đun ứng dụng, nếu cùng thuộc tính Gradle này đã có trong cả projectDir/gradle.properties lẫn projectDir/app/gradle.properties, giá trị của projectDir/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ụ: projectDir/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 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 tích hợp với Studio. Tuy nhiên, trong 4.2, JDK 11 sẽ được tích hợp để thay thế. Khi sử dụng JDK đi kèm mới để chạy Gradle, tính năng 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ạiProject 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 Plugin 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 nội dung 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 VM, 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 của bản dựng, bạn nên kiểm thử các 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ác tùy chọn khác đã được thiết lập trong trường này, hãy thêm tùy chọn mới:

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

Để đo tốc độ bản dựng với các cấu hình khác nhau, hãy xem nội dung 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 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 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 Plugin Android cho Gradle đóng gói các thư viện gốc đã nén khi tạo ứng dụng, hãy đặt useLegacyPackagingthà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.

4.1.0 (tháng 8 năm 2020)

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.5 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 29.0.2 29.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.1.6352462 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 Plugin Android cho Gradle này có các tính năng mới sau đây.

Hỗ trợ tập lệnh Kotlin DSL

Để giúp cải thiện trải nghiệm chỉnh sửa cho người dùng tập lệnh buildscript Kotlin, DSL và API của Plugin Android cho Gradle 4.1 hiện được xác định trong một tập hợp các giao diện Kotlin tách biệt với các lớp triển khai. Như vậy tức là:

  • Hiện bạn có thể khai báo rõ ràng tính chất rỗng và khả năng biến đổi trên các kiểu Kotlin.
  • Tài liệu được tạo qua các giao diện đó được phát hành trong Tài liệu tham khảo về Kotlin API.
  • Giao diện API của Plugin Android cho Gradle được xác định rõ ràng để giúp giảm rắc rối trong việc mở rộng bản dựng Android trong tương lai.

Các kiểu tập hợp được thiết kế để thay đổi trong DSL hiện được xác định thống nhất như sau:

val collection: MutableCollectionType

Như vậy tức là bạn không thể viết các lệnh sau trong tập lệnh Kotlin cho một số tập hợp từng hỗ trợ các lệnh này:

collection = collectionTypeOf(...)

Tuy nhiên, việc thay đổi tập hợp được hỗ trợ thống nhất nên collection += …collection.add(...) hiện sẽ hoạt động ở mọi nơi.

Nếu bạn phát hiện vấn đề khi nâng cấp một dự án sử dụng API và DSL Kotlin của Plugin Android cho Gradle, vui lòng báo cáo lỗi.

Xuất phần phụ thuộc C/C++ qua tệp Android Archive Library (AAR)

Plugin Android cho Gradle 4.0 bổ sung khả năng nhập các gói Profab trong các phần phụ thuộc AAR. Trong AGP 4.1, hiện bạn có thể xuất các thư viện từ hệ thống xây dựng gốc bên ngoài trong tệp AAR cho dự án Thư viện Android.

Để xuất các thư viện gốc, hãy bổ sung đoạn mã sau vào khối android của tệp build.gradle trong dự án thư viện:

Groovy


buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

Kotlin


buildFeatures {
    prefabPublishing = true
}

prefab {
    create("mylibrary") {
      headers = "src/main/cpp/mylibrary/include"
    }

    create("myotherlibrary") {
        headers = "src/main/cpp/myotherlibrary/include"
    }
}

Trong ví dụ này, thư viện mylibrarymyotherlibrary từ ndk-build hoặc hệ thống xây dựng gốc bên ngoài CMake sẽ được đóng gói trong AAR do bản dựng tạo ra, mỗi thư viện sẽ xuất tiêu đề từ thư mục được chỉ định cho các phần phụ thuộc.

Hỗ trợ trình rút gọn mã R8 cho siêu dữ liệu Kotlin

Kotlin sử dụng các siêu dữ liệu tuỳ chỉnh trong các tệp lớp Java để xác định cấu trúc ngôn ngữ Kotlin. R8 hiện hỗ trợ duy trì và ghi đè siêu dữ liệu Kotlin để hỗ trợ hoàn toàn việc thu gọn các thư viện và ứng dụng Kotlin bằng cách sử dụng kotlin-reflect.

Để lưu trữ siêu dữ liệu Kotlin, hãy bổ sung những quy tắc lưu trữ sau:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

Thao tác này sẽ ra lệnh cho R8 lưu trữ siêu dữ liệu Kotlin cho mọi lớp được lưu trực tiếp.

Để biết thêm thông tin, hãy xem nội dung Thu gọn các thư viện và ứng dụng Kotlin bằng cách sử dụng tính năng phản chiếu Kotlin trong R8 trên Medium.

Nhận định trong bản gỡ lỗi

Khi bạn xây dựng phiên bản gỡ lỗi cho ứng dụng bằng cách sử dụng Plugin Android cho Gradle 4.1.0 trở lên, trình biên dịch tích hợp (D8) sẽ ghi lại mã ứng dụng để bật tính năng đưa ra nhận định tại thời điểm biên dịch. Nhờ đó, bạn sẽ luôn được kiểm tra nhận định.

Thay đổi về hành vi

Xoá bộ nhớ đệm bản dựng Plugin Android cho Gradle

Bộ nhớ đệm bản dựng AGP đã bị xoá trong AGP 4.1. Ra mắt trong AGP 2.3 trước đây để bổ sung cho bộ nhớ đệm bản dựng Gradle, bộ nhớ đệm bản dựng AGP đã được thay thế hoàn toàn bằng bộ nhớ đệm bản dựng Gradle trong AGP 4.1. Thay đổi này không ảnh hưởng đến thời gian tạo bản dựng.

Tác vụ cleanBuildCache cũng như các thuộc tính android.enableBuildCacheandroid.buildCacheDir không còn được dùng và sẽ bị xoá trong AGP 7.0. Thuộc tính android.enableBuildCache hiện không có hiệu lực, trong khi thuộc tính android.buildCacheDir và tác vụ cleanBuildCache sẽ hoạt động cho đến khi AGP 7.0 xoá tất cả nội dung bộ nhớ đệm bản dựng hiện có của AGP.

Giảm đáng kể kích thước những ứng dụng sử dụng tính năng rút gọn mã

Kể từ bản phát hành này, các trường thuộc lớp R không còn được lưu giữ theo mặc định. Tính năng trên có thể giúp tiết kiệm đáng kể kích thước tệp APK đối với những ứng dụng cho phép rút gọn mã. Hành động này sẽ không làm thay đổi hành vi trừ phi bạn truy cập vào các lớp R bằng phương thức phản chiếu. Trong trường hợp này, bạn cần bổ sung quy tắc lưu giữ cho các lớp R trên.

Đổi tên thuộc tính android.namespacedRClass thành android.nonTransitiveRClass

Cờ thử nghiệm android.namespacedRClass đã được đổi tên thành android.nonTransitiveRClass.

Được thiết lập trong tệp gradle.properties, cờ này sẽ bật vùng chứa tên của từng lớp R trong thư viện để lớp R của thư mục chỉ bao gồm các tài nguyên được khai báo trong thư viện và không có tài nguyên từ các phần phụ thuộc của thư viện, do đó giảm quy mô của lớp R cho thư viện.

Kotlin DSL: Đổi tên coreLibraryDesugaringEnabled

Tuỳ chọn biên dịch DSL Kotlin coreLibraryDesugaringEnabled đã được thay đổi thành isCoreLibraryDesugaringEnabled. Để biết thêm thông tin về cờ này, hãy xem nội dung Hỗ trợ đơn giản hoá API của Java 8 trở lên (Plugin Android cho Gradle 4.0.0 trở lên).

Xoá thuộc tính phiên bản khỏi lớp BuildConfig trong các dự án thư viện

Chỉ đối với các dự án thư viện, thuộc tính BuildConfig.VERSION_NAMEBuildConfig.VERSION_CODE đã bị xoá khỏi lớp BuildConfig được tạo vì các giá trị tĩnh này không phản ánh giá trị cuối cùng của mã và tên phiên bản ứng dụng, do đó gây hiểu lầm. Ngoài ra, các giá trị này bị loại bỏ trong quá trình hợp nhất tệp kê khai.

Trong một phiên bản tương lai của Plugin Android cho Gradle, các thuộc tính versionNameversionCode cũng sẽ bị xoá khỏi DSL cho thư viện. Hiện tại, không có cách tự động truy cập vào mã/tên phiên bản ứng dụng từ dự án phụ trong thư viện.

Đối với các mô-đun ứng dụng, không có gì thay đổi, bạn vẫn có thể gán giá trị cho versionCodeversionName trong DSL; những giá trị này sẽ truyền đến tệp kê khai của ứng dụng và các trường BuildConfig.

Thiết lập đường dẫn NDK

Bạn có thể thiết lập đường dẫn đến chế độ cài đặt NDK cục bộ bằng cách sử dụng thuộc tính android.ndkPath trong tệp build.gradle của mô-đun.

Groovy

android {
   ndkPath "your-custom-ndk-path"
}

Kotlin

android {
   ndkPath = "your-custom-ndk-path"
}

Nếu bạn sử dụng thuộc tính này cùng với thuộc tính android.ndkVersion, đường dẫn này phải chứa phiên bản NDK khớp với android.ndkVersion.

Thay đổi về hành vi kiểm thử đơn vị thư viện

Chúng tôi đã thay đổi cách thức biên dịch và chạy kiểm thử đơn vị thư viện. Kiểm thử đơn vị thư viện hiện được biên dịch và chạy dựa trên các lớp biên dịch/thời gian chạy của chính thư viện, dẫn đến việc kiểm thử đơn vị tiêu thụ thư viện theo cách tương tự như các dự án phụ bên ngoài. Cấu hình này thường giúp kiểm thử tốt hơn.

Trong một số trường hợp, việc kiểm thử đơn vị thư viện sử dụng chức năng liên kết dữ liệu có thể gặp phải tình trạng lớp DataBindingComponent hoặc BR bị thiếu. Bạn cần chuyển các kiểm thử đó sang một kiểm thử đo lường trong dự án androidTest, vì việc biên dịch và chạy các lớp đó trong kiểm thử đơn vị có thể tạo đầu ra không chính xác.

Không dùng Plugin Gradle io.fabric nữa

Trình bổ trợ io.fabric Gradle không còn được dùng nữa và không tương thích với phiên bản 4.1 của Plugin Android cho Gradle. Để biết thêm thông tin về việc không dùng SDK Fabric và chuyển sang SDK Firebase Crashlytics, hãy xem nội dung Nâng cấp lên SDK Firebase Crashlytics.

Phiên bản 4.0.0 (tháng 4 năm 2020)

Phiên bản Plugin Android này yêu cầu:

Phiên bản 4.0.1 (tháng 7 năm 2020)

Bản cập nhật nhỏ này hỗ trợ khả năng tương thích với các tính năng và tùy chọn cài đặt mặc định mới cho khả năng hiển thị gói trong Android 11.

Trong các phiên bản Android trước, bạn có thể xem danh sách tất cả ứng dụng đã cài đặt trên một thiết bị. Kể từ Android 11 (API cấp 30), các ứng dụng mặc định chỉ có quyền truy cập vào một danh sách đã lọc gói đã cài đặt. Để xem thêm danh sách nhiều ứng dụng trên hệ thống, giờ đây, bạn cần bổ sung phần tử <queries> trong tệp kê khai Android của thư viện hoặc ứng dụng.

Plugin Android cho Gradle 4.1 trở lên đã tương thích với bản khai báo <queries> mới; tuy nhiên, các phiên bản cũ hơn không tương thích. Nếu bạn thêm phần tử <queries> hoặc nếu bạn bắt đầu dựa vào thư viện hoặc SDK hỗ trợ cho Android 11, bạn có thể gặp lỗi hợp nhất tệp kê khai khi tạo ứng dụng.

Để giải quyết vấn đề này, chúng tôi sẽ phát hành một bộ bản vá cho AGP 3.3 trở lên. Nếu bạn đang sử dụng phiên bản AGP cũ, hãy nâng cấp lên một trong các phiên bản sau:

Nếu bạn đang dùng
phiên bản AGP...
...hãy nâng cấp lên:
4.0.* 4.0.1
3.6.* 3.6.4
3.5.* 3.5.4
3.4.* 3.4.3
3.3.* 3.3.3

Để biết thêm thông tin về tính năng mới này, hãy xem nội dung Chế độ hiển thị gói trong Android 11.

Tính năng mới

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

Hỗ trợ trình phân tích bản dựng Android Studio

Cửa sổ Build Analyzer (Trình phân tích bản dựng) giúp bạn tìm hiểu và chẩn đoán các vấn đề xảy ra với quá trình tạo bản dựng, chẳng hạn như vô hiệu hoá tính năng tối ưu hoá và các tác vụ đã được định cấu hình không đúng cách. Tính năng này chỉ hoạt động khi bạn sử dụng Android Studio 4.0 trở lên với Plugin Android cho Gradle 4.0.0 trở lên. Bạn có thể mở cửa sổ Build Analyzer (Trình phân tích bản dựng) trong Android Studio như sau:

  1. Nếu chưa thực hiện việc này, bạn hãy tạo một ứng dụng bằng cách chọn Build (Bản dựng) > Make Project (Tạo dự án) trên thanh trình đơn.
  2. Hãy chọn View (Xem) > Tool Windows (Cửa sổ công cụ) > Build (Bản dựng) trên thanh trình đơn.
  3. Trong cửa sổ Build (Bản dựng), hãy mở cửa sổ Build Analyzer (Trình phân tích bản dựng) theo một trong các cách sau:
    • Sau khi Android Studio hoàn tất quá trình tạo dự án, hãy nhấp vào thẻ Build Analyzer (Trình phân tích bản dựng).
    • Sau khi Android Studio hoàn tất quá trình tạo dự án, hãy nhấp vào đường liên kết ở bên phải cửa sổ Build Output (Đầu ra bản dựng).

Cửa sổ Build Analyzer (Trình phân tích bản dựng) sắp xếp các vấn đề về bản dựng có thể xảy ra trong một cây ở bên trái. Bạn có thể kiểm tra và nhấp vào từng vấn đề để tìm hiểu thông tin chi tiết về vấn đề đó trong bảng bên phải. Khi phân tích bản dựng, Android Studio sẽ tính toán tập hợp tác vụ đã xác định thời lượng của bản dựng và cung cấp hình ảnh để giúp bạn hiểu tác động của từng tác vụ này. Bạn cũng có thể xem thông tin chi tiết về các cảnh báo bằng cách mở rộng nút Warnings (Cảnh báo).

Để tìm hiểu thêm, hãy đọc bài viết xác định tốc độ hồi quy của bản dựng.

Đơn giản hoá thư viện Java 8 trong D8 và R8

Plugin Android cho Gradle hiện đã hỗ trợ việc sử dụng một số API ngôn ngữ Java 8 mà không yêu cầu cấp API tối thiểu cho ứng dụng.

Thông qua một quy trình có tên là đơn giản hoá (desugaring), trình biên dịch DEX D8 trong Android Studio 3.0 trở lên đã hỗ trợ đáng kể các tính năng ngôn ngữ Java 8 (chẳng hạn như biểu thức lambda, phương thức giao diện mặc định, thử với các tài nguyên và các tính năng khác). Trong Android Studio 4.0, công cụ đơn giản hoá đã được mở rộng để có thể đơn giản hoá các API ngôn ngữ Java. Như vậy tức là bạn hiện có thể đưa các API ngôn ngữ tiêu chuẩn chỉ có trong các bản phát hành Android gần đây (chẳng hạn như java.util.streams) vào các ứng dụng hỗ trợ các phiên bản Android cũ.

Bộ API sau đây được hỗ trợ trong bản phát hành này:

  • Luồng tuần tự (java.util.stream)
  • Một tập hợp con của java.time
  • java.util.function
  • Các mục bổ sung gần đây cho java.util.{Map,Collection,Comparator}
  • Mục không bắt buộc (java.util.Optional, java.util.OptionalIntjava.util.OptionalDouble) và một số lớp mới khác hữu ích với các API ở trên
  • Một số mục bổ sung cho java.util.concurrent.atomic (các phương thức mới trên AtomicInteger, AtomicLongAtomicReference)
  • ConcurrentHashMap (có bản sửa lỗi cho Android 5.0)

Để hỗ trợ các API ngôn ngữ này, D8 biên dịch một tệp DEX trong thư viện riêng có chứa cách triển khai các API còn thiếu và đưa vào ứng dụng. Quy trình đơn giản hoá sẽ ghi lại mã ứng dụng để sử dụng thư viện này trong thời gian chạy.

Để bật tính năng hỗ trợ cho các API ngôn ngữ này, hãy đưa nội dung sau đây vào tệp build.gradle của mô-đun ứng dụng:

Groovy


android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}

Kotlin


android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled = true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    isCoreLibraryDesugaringEnabled = true
    // Sets Java compatibility to Java 8
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.4")
}

Xin lưu ý rằng bạn cũng cần bổ sung đoạn mã trên vào tệp build.gradle của library module (mô-đun thư viện) nếu:

  • Các hoạt động kiểm thử được đo lường của mô-đun thư viện sử dụng các API ngôn ngữ này (trực tiếp hoặc thông qua mô-đun thư viện hoặc các phần phụ thuộc của mô-đun). Việc này là để cung cấp các API còn thiếu cho APK kiểm thử được đo lường.

  • Bạn muốn chạy riêng công cụ tìm lỗi mã nguồn trên mô-đun thư viện. Tính năng này giúp nhận ra cách sử dụng hợp lệ các API ngôn ngữ và tránh báo cáo các cảnh báo sai.

Tuỳ chọn mới giúp bật hoặc tắt tính năng xây dựng

Plugin Android cho Gradle 4.0.0 giới thiệu một phương pháp mới điều khiển các tính năng bản dựng bạn muốn bật và vô hiệu hoá, chẳng hạn như Liên kết khung nhìn và Liên kết dữ liệu. Theo mặc định, các tính năng mới sẽ được vô hiệu hoá. Sau đó, bạn có thể sử dụng khối buildFeatures để chỉ bật các tính năng mình muốn và giúp tối ưu hoá hiệu suất bản dựng cho dự án. Bạn có thể thiết lập các tuỳ chọn cho mỗi mô-đun trong tệp build.gradle ở cấp mô-đun như sau:

Groovy


android {
    // The default value for each feature is shown below. You can change the value to
    // override the default behavior.
    buildFeatures {
        // Determines whether to generate a BuildConfig class.
        buildConfig = true
        // Determines whether to support View Binding.
        // Note that the viewBinding.enabled property is now deprecated.
        viewBinding = false
        // Determines whether to support Data Binding.
        // Note that the dataBinding.enabled property is now deprecated.
        dataBinding = false
        // Determines whether to generate binder classes for your AIDL files.
        aidl = true
        // Determines whether to support RenderScript.
        renderScript = true
        // Determines whether to support injecting custom variables into the module’s R class.
        resValues = true
        // Determines whether to support shader AOT compilation.
        shaders = true
    }
}

Kotlin


android {
    // The default value for each feature is shown below. You can change the value to
    // override the default behavior.
    buildFeatures {
        // Determines whether to generate a BuildConfig class.
        buildConfig = true
        // Determines whether to support View Binding.
        // Note that the viewBinding.enabled property is now deprecated.
        viewBinding = false
        // Determines whether to support Data Binding.
        // Note that the dataBinding.enabled property is now deprecated.
        dataBinding = false
        // Determines whether to generate binder classes for your AIDL files.
        aidl = true
        // Determines whether to support RenderScript.
        renderScript = true
        // Determines whether to support injecting custom variables into the module’s R class.
        resValues = true
        // Determines whether to support shader AOT compilation.
        shaders = true
    }
}

Bạn cũng có thể chỉ định tuỳ chọn cài đặt mặc định cho các tính năng này trên tất cả mô-đun trong dự án bằng cách đưa một hoặc nhiều nội dung sau vào tệp gradle.properties của dự án như bên dưới. Lưu ý là bạn vẫn có thể sử dụng khối buildFeatures trong tệp build.gradle ở cấp mô-đun để ghi đè các chế độ cài đặt mặc định trên toàn dự án.

android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=true
android.defaults.buildfeatures.renderscript=true
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=true

Các phần phụ thuộc có tính năng liên quan với nhau

Trong các phiên bản trước của Plugin Android cho Gradle, tất cả mô-đun tính năng chỉ dựa vào mô-đun cơ sở của ứng dụng. Hiện khi sử dụng Plugin Android cho Gradle 4.0.0, bạn có thể thêm mô-đun tính năng phụ thuộc một mô-đun tính năng khác. Tức là một tính năng của :video có thể phụ thuộc vào tính năng của :camera và tính năng này cũng đồng thời phụ thuộc vào mô-đun cơ sở, theo minh hoạ trong hình dưới đây.

Các phần phụ thuộc có tính năng liên quan với nhau

Mô-đun tính năng :video phụ thuộc vào tính năng :camera. Tính năng này lại phụ thuộc vào mô-đun :app cơ sở.

Tức là khi ứng dụng yêu cầu tải một mô-đun tính năng xuống, ứng dụng cũng sẽ tải các mô-đun tính năng khác mà nó phụ thuộc vào. Sau khi tạo mô-đun tính năng cho ứng dụng, bạn có thể khai báo phần phụ thuộc tính năng trên tệp build.gradle của mô-đun. Ví dụ: mô-đun :video khai báo phần phụ thuộc trên :camera như sau:

Groovy


// In the build.gradle file of the ':video' module.
dependencies {
    // All feature modules must declare a dependency
    // on the base module.
    implementation project(':app')
    // Declares that this module also depends on the 'camera'
    // feature module.
    implementation project(':camera')
    ...
}

Kotlin


// In the build.gradle file of the ':video' module.
dependencies {
    // All feature modules must declare a dependency
    // on the base module.
    implementation(project(":app"))
    // Declares that this module also depends on the 'camera'
    // feature module.
    implementation(project(":camera"))
    ...
}

Ngoài ra, bạn nên bật tính năng phần phụ thuộc có tính năng liên quan với nhau trên Android Studio (ví dụ: để hỗ trợ tính năng này khi chỉnh sửa cấu hình Run (Chạy)) bằng cách nhấp vào Help > Edit Custom VM Options (Trợ giúp > Tuỳ chọn chỉnh sửa máy ảo tuỳ chỉnh) trên thanh trình đơn rồi bổ sung nội dung sau:

-Drundebug.feature.on.feature=true

Siêu dữ liệu của phần phụ thuộc

Khi xây dựng ứng dụng bằng trình bổ trợ Android cho Gradle 4.0.0 trở lên, trình bổ trợ sẽ bao gồm siêu dữ liệu mô tả các phần phụ thuộc được biên dịch thành ứng dụng. Khi bạn tải ứng dụng lên, Play Console sẽ kiểm tra siêu dữ liệu này để mang lại cho bạn những lợi ích sau:

  • Nhận thông báo về các vấn đề đã biết liên quan đến SDK và các phần phụ thuộc ứng dụng sử dụng
  • Nhận ý kiến phản hồi hữu ích để giải quyết những vấn đề đó

Dữ liệu được nén, mã hoá bằng một khoá ký Google Play và lưu trữ trong khối ký của ứng dụng phát hành. Tuy nhiên, bạn có thể tự kiểm tra siêu dữ liệu trong các tệp bản dựng trung gian cục bộ trong thư mục sau: <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt.

Nếu không muốn chia sẻ thông tin này, bạn có thể chọn không sử dụng bằng cách đưa nội dung sau vào tệp build.gradle của mô-đun:

Groovy


android {
    dependenciesInfo {
        // Disables dependency metadata when building APKs.
        includeInApk = false
        // Disables dependency metadata when building Android App Bundles.
        includeInBundle = false
    }
}

Kotlin


android {
    dependenciesInfo {
        // Disables dependency metadata when building APKs.
        includeInApk = false
        // Disables dependency metadata when building Android App Bundles.
        includeInBundle = false
    }
}

Nhập thư viện gốc qua các phần phụ thuộc Android Archive (AAR)

Hiện bạn có thể nhập thư viện C/C++ qua các phần phụ thuộc AAR của ứng dụng. Khi bạn làm theo các bước cấu hình được mô tả dưới đây, Gradle sẽ tự động cung cấp những thư viện gốc này để sử dụng với hệ thống xây dựng gốc bên ngoài, chẳng hạn như CMake. Xin lưu ý rằng Gradle chỉ cung cấp những thư viện này cho bản dựng; bạn vẫn phải định cấu hình các tập lệnh bản dựng để sử dụng các thư viện đó.

Các thư viện được xuất bằng định dạng gói Prefab.

Mỗi phần phụ thuộc có thể hiển thị tối đa một gói Profab, bao gồm một hoặc nhiều mô-đun. Mô-đun Prefab là một thư viện, có thể là một thư viện chia sẻ, tĩnh hoặc chỉ có tiêu đề.

Thường thì tên gói khớp với tên cấu phần phần mềm Maven và tên mô-đun khớp với tên thư viện. Tuy nhiên, điều này không phải lúc nào cũng đúng. Vì bạn cần biết tên gói và mô-đun của các thư viện, bạn có thể cần tham khảo tài liệu về phần phụ thuộc để xác định các tên đó.

Định cấu hình hệ thống xây dựng gốc bên ngoài

Để xem các bước bạn cần thực hiện, hãy nhấp vào hệ thống xây dựng gốc bên ngoài bạn định sử dụng.

Dự án CMake thông qua biến CMAKE_SUMMARY_ROOT_PATH sẽ thấy được các phần phụ thuộc gốc có trong AAR sẽ hiển thị với dự án CMake. Giá trị này sẽ được Gradle thiết lập tự động khi CMake được gọi, vì vậy, nếu hệ thống xây dựng sửa đổi, hãy nhớ thêm vào thay vì chỉ định biến trên.

Mỗi phần phụ thuộc sẽ cho thấy một gói tệp cấu hình cho bản dựng CMake, mà bạn sẽ nhập bằng lệnh find_package. Lệnh này tìm kiếm các gói tệp cấu hình khớp với tên và phiên bản gói đã nêu và hiển thị các mục tiêu mà hệ thống xác định sẽ được dùng trong bản dựng. Ví dụ: nếu ứng dụng của bạn xác định libapp.so và ứng dụng sử dụng lệnh curl, bạn nên đưa những nội dung sau vào tệp CMakeLists.txt:

add_library(app SHARED app.cpp)

# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)

Hiện bạn có thể chỉ định #include "curl/curl.h" trong phần app.cpp. Khi bạn xây dựng dự án, hệ thống xây dựng gốc bên ngoài sẽ tự động liên kết libapp.so với libcurl.so và các gói libcurl.so trong APK hoặc gói ứng dụng. Để biết thêm thông tin, hãy tham khảo mẫu prefab curl.

Thay đổi về hành vi

Khi sử dụng phiên bản trình bổ trợ này, bạn có thể gặp phải các thay đổi hành vi sau.

Cập nhật cấu hình ký tên v1/v2

Hành vi của các cấu hình ký ứng dụng trong khối signingConfig đã thay đổi thành:

Ký bằng v1
  • Nếu bạn bật v1SigningEnabled, AGP sẽ thực hiện quy trình ký ứng dụng bằng phiên bản v1.
  • Nếu v1SigningEnabled bị người dùng vô hiệu hoá một cách rõ ràng, tính năng ký ứng dụng phiên bản v1 sẽ không được thực hiện.
  • Nếu người dùng chưa bật tính năng ký phiên bản v1, họ có thể tự động vô hiệu hoá tính năng này dựa trên minSdktargetSdk.
Ký bằng v2
  • Nếu bạn bật v2SigningEnabled một cách rõ ràng, AGP sẽ thực hiện quy trình ký ứng dụng bằng phiên bản v2.
  • Nếu v2SigningEnabled bị người dùng vô hiệu hoá một cách rõ ràng, tính năng ký ứng dụng phiên bản 2 sẽ không được thực hiện.
  • Nếu người dùng chưa bật tính năng ký phiên bản 2 một cách rõ ràng, tính năng này có thể tự động vô hiệu hoá dựa trên targetSdk.

Những thay đổi này cho phép AGP tối ưu hoá các bản dựng bằng cách vô hiệu hoá cơ chế ký dựa trên việc người dùng có bật các cờ này hay không. Trước bản phát hành này, v1Signing có thể bị vô hiệu hoá ngay cả khi bạn đã bật chế độ này một cách rõ ràng. Điều này có thể gây nhầm lẫn.

Xoá Plugin Android cho Gradle featureinstantapp

Plugin Android cho Gradle 3.6.0 đã ngừng sử dụng trình bổ trợ Tính năng (com.android.feature) và trình bổ trợ Ứng dụng tức thì (com.android.instantapp) để ủng hộ việc sử dụng plugin Tính năng động (com.android.dynamic-feature) nhằm tạo và đóng gói các ứng dụng tức thì bằng cách sử dụng Android App Bundle.

Trong Plugin Android cho Gradle 4.0.0 trở lên, những trình bổ trợ không dùng nữa này sẽ bị xoá hoàn toàn. Do đó, để sử dụng Plugin Android cho Gradle mới nhất, bạn cần di chuyển ứng dụng tức thì để hỗ trợ Android App Bundle. Bằng cách di chuyển các ứng dụng tức thì, bạn có thể tận dụng những lợi ích của gói ứng dụng và đơn giản hoá thiết kế mô-đun của ứng dụng.

Xoá tính năng xử lý chú giải riêng

Chúng tôi đã loại bỏ khả năng tách riêng xử lý chú giải thành một tác vụ chuyên biệt. Tuỳ chọn này được dùng để duy trì quá trình biên dịch Java gia tăng khi các trình xử lý chú giải không gia tăng sử dụng trong các dự án chỉ dành cho Java; tuỳ chọn đã được bật bằng cách thiết lập android.enableSeparateAnnotationProcessing thành true trong tệp gradle.properties, tuy nhiên phương pháp này đã không còn tác dụng.

Thay vào đó, bạn nên chuyển sang sử dụng trình xử lý chú giải gia tăng để cải thiện hiệu suất bản dựng.

Không dùng includeCompileClasspath nữa

Plugin Android cho Gradle không còn kiểm tra hoặc đưa vào những trình xử lý chú giải mà bạn khai báo trên classpath biên dịch. Đồng thời, thuộc tính DSL annotationProcessorOptions.includeCompileClasspath không còn ảnh hưởng. Nếu đưa trình xử lý chú giải vào classpath biên dịch, bạn có thể gặp lỗi sau:

Error: Annotation processors must be explicitly declared now.

Để giải quyết vấn đề này, bạn phải đưa trình xử lý chú giải vào tệp build.gradle bằng cấu hình phần phụ thuộc annotationProcessor. Để tìm hiểu thêm, hãy đọc bài viết Bổ sung trình xử lý chú giải.

Tự động đóng gói phần phụ thuộc tạo sẵn mà CMake sử dụng

Đối với các phiên bản trước của Plugin Android cho Gradle, bạn cần phải đóng gói rõ ràng mọi thư viện tạo sẵn được hệ thống xây dựng gốc bên ngoài CMake sử dụng bằng cách dùng jniLibs. Bạn có thể có các thư viện trong thư mục src/main/jniLibs của mô-đun hoặc có thể trong một số thư mục khác được định cấu hình trong tệp build.gradle:

Groovy

sourceSets {
    main {
        // The libs directory contains prebuilt libraries that are used by the
        // app's library defined in CMakeLists.txt via an IMPORTED target.
        jniLibs.srcDirs = ['libs']
    }
}

Kotlin

sourceSets {
    main {
        // The libs directory contains prebuilt libraries that are used by the
        // app's library defined in CMakeLists.txt via an IMPORTED target.
        jniLibs.setSrcDirs(listOf("libs"))
    }
}

Với Plugin Android cho Gradle 4.0, cấu hình trên không còn cần thiết và sẽ gây ra lỗi cho bản dựng:

* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > More than one file was found with OS independent path 'lib/x86/libprebuilt.so'

Bản dựng gốc bên ngoài hiện tự động đóng gói các thư viện đó, vì vậy, việc đóng gói rõ ràng thư viện bằng jniLibs sẽ dẫn đến việc trùng lặp. Để tránh lỗi bản dựng, hãy di chuyển thư viện tạo sẵn đến một vị trí bên ngoài jniLibs hoặc xoá cấu hình jniLibs khỏi tệp build.gradle.

Vấn đề đã biết

Phần này mô tả các sự cố đã biết tồn tại trong Plugin Android cho Gradle 4.0.0.

Điều kiện thực hiện trong cơ chế trình chạy Gradle

Các thay đổi trong Plugin Android cho Gradle 4.0 có thể kích hoạt một điều kiện thực hiện trong Gradle khi chạy với --no-daemon và các phiên bản của Gradle 6.3 trở xuống, khiến các bản dựng bị treo sau khi hoàn tất.

Vấn đề này sẽ được khắc phục trong Gradle 6.4.

3.6.0 (tháng 2 năm 2020)

Phiên bản Plugin Android này yêu cầu:

Tính năng mới

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

Liên kết khung nhìn

Liên kết khung nhìn cung cấp sự an toàn thời gian biên dịch khi tham chiếu các khung nhìn trong mã. Bây giờ, bạn có thể thay thế findViewById() bằng tệp đối chiếu lớp liên kết tạo tự động. Để bắt đầu sử dụng tính năng Liên kết khung nhìn, hãy đưa nội dung sau vào tệp build.gradle của mỗi mô-đun:

Groovy


android {
    viewBinding.enabled = true
}

Kotlin


android {
    viewBinding.enabled = true
}

Để tìm hiểu thêm, hãy đọc tài liệu về Liên kết khung nhìn.

Hỗ trợ trình bổ trợ phát hành của Maven

Plugin Android cho Gradle bao gồm hỗ trợ cho Trình bổ trợ phát hành của Maven cho Gradle, cho phép bạn phát hành các cấu phần phần mềm bản dựng lên một kho lưu trữ Apache Maven. Plugin Android cho Gradle sẽ tạo mộtthành phần cho mỗi cấu phần phần mềm biến thể xây dựng trong ứng dụng hoặc mô-đun thư viện mà bạn có thể sử dụng để tuỳ chỉnh ấn bản cho kho lưu trữ Maven.

Để tìm hiểu thêm, hãy truy cập trang về cách sử dụng Trình bổ trợ phát hành của Maven.

Công cụ đóng gói mặc định mới

Khi xây dựng phiên bản gỡ lỗi của ứng dụng, trình bổ trợ sẽ sử dụng một công cụ đóng gói mới có tên zipflinger để xây dựng APK. Công cụ mới này sẽ giúp cải thiện tốc độ xây dựng. Nếu công cụ đóng gói mới không hoạt động như mong đợi, vui lòng báo cáo lỗi. Bạn có thể quay lại sử dụng công cụ đóng gói cũ bằng cách đưa nội dung sau vào tệp gradle.properties:

android.useNewApkCreator=false

Thuộc tính bản dựng gốc

Hiện bạn có thể xác định khoảng thời gian cần thiết để Clang xây dựng và liên kết mỗi tệp C/C++ trong dự án. Gradle có thể xuất một dấu vết Chrome chứa dấu thời gian cho những sự kiện biên dịch này, giúp bạn có thể hiểu rõ hơn về thời gian cần thiết để xây dựng dự án. Để xuất tệp thuộc tính bản dựng này, hãy làm như sau:

  1. Bổ sung cờ -Pandroid.enableProfileJson=true khi chạy bản dựng Gradle. Ví dụ:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. Mở trình duyệt Chrome và nhập chrome://tracing vào thanh tìm kiếm.

  3. Nhấp vào nút Load và chuyển đến project-root/build/android-profile để tìm tệp. Tệp có tên profile-timestamp.json.gz.

Bạn có thể xem dữ liệu thuộc tính bản dựng gốc ở gần đầu trình xem:

Theo dõi thuộc tính bản dựng gốc trong Chrome

Thay đổi về hành vi

Khi sử dụng phiên bản trình bổ trợ này, bạn có thể gặp phải các thay đổi hành vi sau.

Thư viện gốc đóng gói không nén theo mặc định

Khi bạn xây dựng ứng dụng, theo mặc định trình bổ trợ sẽ thiết lập extractNativeLibs thành "false". Điều đó nghĩa là các thư viện gốc của bạn được căn chỉnh theo trang và đóng gói không nén. Mặc dù tính năng này dẫn đến tăng kích thước tải lên, nhưng người dùng sẽ có được các lợi ích sau:

  • Giảm dung lượng cài đặt ứng dụng vì nền tảng có thể truy cập vào các thư viện gốc trực tiếp từ APK đã cài đặt không cần tạo bản sao của các thư viện.
  • Giảm kích thước tải xuống vì tệp nén ở Cửa hàng Play thường chất lượng hơn khi bạn đưa thư viện gốc không nén vào APK hoặc Android App Bundle.

Ngược lại, nếu bạn muốn Plugin Android cho Gradle đóng gói các thư viện gốc được nén, hãy đưa nội dung sau vào tệp kê khai của ứng dụng:

<application
    android:extractNativeLibs="true"
    ... >
</application>

Phiên bản NDK mặc định

Nếu bạn tải nhiều phiên bản của NDK thì hiện Plugin Android cho Gradle sẽ chọn một phiên bản mặc định dùng khi biên dịch các tệp mã nguồn. Trước đây, plugin này đã chọn phiên bản đã tải xuống mới nhất của NDK. Sử dụng thuộc tính android.ndkVersion trong tệp build.gradle của mô-đun để ghi đè phiên bản mặc định do plugin chọn.

Đơn giản hoá thao tác tạo lớp R

Plugin Android cho Gradle đơn giản hoá classpath biên dịch bằng cách chỉ tạo một lớp R cho từng mô-đun thư viện trong dự án và chia sẻ các lớp R đó với các phần phụ thuộc khác của mô-đun. Quá trình tối ưu hoá này sẽ tạo ra các bản dựng nhanh hơn, nhưng bạn cần lưu ý những điều sau:

  • Vì trình biên dịch chia sẻ các lớp R có phần phụ thuộc mô-đun ngược dòng, nên điều quan trọng là mỗi mô-đun trong dự án phải sử dụng một tên gói duy nhất.
  • Mức hiển thị lớp R của một thư viện đối với các phần phụ thuộc khác của dự án được xác định bằng cấu hình dùng để đưa thư viện vào dưới dạng phần phụ thuộc. Ví dụ: nếu Thư viện A đưa vào Thư viện B dưới dạng phần phụ thuộc 'api', thì Thư viện A và các thư viện khác phụ thuộc vào Thư viện A có quyền truy cập vào lớp R của Thư viện B. Tuy nhiên, các thư viện khác có thể không có quyền truy cập vào lớp R của Thư viện B nếu Thư viện A sử dụng cấu hình phần phụ thuộc implementation. Để tìm hiểu thêm, hãy đọc bài viết về các cấu hình phụ thuộc.

Xóa tài nguyên bị thiếu khỏi cấu hình mặc định

Đối với các mô-đun Thư viện, nếu bạn bổ sung một tài nguyên cho ngôn ngữ mà bạn không đưa vào nhóm tài nguyên mặc định— ví dụ: nếu bạn bổ sung hello_world dưới dạng tài nguyên chuỗi trong /values-es/strings.xml nhưng bạn không xác định tài nguyên đó trong /values/strings.xml—Plugin Android cho Gradle sẽ không còn đưa vào tài nguyên đó khi biên dịch dự án. Sự thay đổi hành vi này sẽ giúp giảm Resource Not Found trường hợp ngoại lệ đối với thời gian chạy và cải thiện tốc độ bản dựng.

D8 hiện tuân thủ chính sách giữ lại dữ liệu CLASS dành cho chú giải

Khi biên dịch ứng dụng, D8 hiện tôn trọng khi các chú giải áp dụng chính sách giữ lại dữ liệu CLASS và các chú thích đó sẽ không còn xuất hiện trong thời gian chạy. Hành vi này cũng tồn tại khi thiết lập SDK mục tiêu của ứng dụng thành API cấp 23. Trước đó, SDK đã cho phép truy cập vào các chú giải này trong thời gian chạy khi biên dịch ứng dụng bằng các phiên bản Plugin Android cho Gradle và D8.

Thay đổi khác về hành vi

  • aaptOptions.noCompress không còn phân biệt chữ hoa chữ thường trên tất cả nền tảng (dành cho cả tệp APK lẫn gói) và tuân theo các đường dẫn sử dụng ký tự viết hoa.
  • Theo mặc định, liên kết dữ liệu hiện được gia tăng. Để tìm hiểu thêm, hãy xem nội dung vấn đề #110061530.
  • Tất cả kiểm thử đơn vị, bao gồm cả kiểm thử đơn vị Roboelectric hiện đều có thể lưu vào bộ nhớ đệm. Để tìm hiểu thêm, hãy xem nội dung vấn đề #115873047.

Bản sửa lỗi

Phiên bản Plugin Android cho Gradle này bao gồm các bản sửa lỗi sau:

  • Hiện chúng tôi đã hỗ trợ kiểm thử đơn vị Robolectric trong các mô-đun thư viện sử dụng tính năng liên kết dữ liệu. Để tìm hiểu thêm, hãy xem nội dung vấn đề #126775542.
  • Hiện bạn có thể chạy connectedAndroidTest tác vụ trên nhiều mô-đun trong khi bật chế độ thực thi song song của Gradle.

Vấn đề đã biết

Phần này mô tả các vấn đề đã biết tồn tại trong Plugin Android cho Gradle 3.6.0.

Tác vụ tìm lỗi mã nguồn Android có hiệu suất thấp

Trình tìm lỗi mã nguồn của Android có thể mất thêm nhiều thời gian để hoàn thành vài dự án do sự hồi quy cơ sở hạ tầng phân tích cú pháp, dẫn đến việc tính toán chậm hơn các kiểu dự đoán cho lambda trong một số cấu trúc mã.

Vấn đề này được báo cáo là một lỗi trong IDEA và sẽ được khắc phục trong Plugin Android cho Gradle 4.0.

Thiếu lớp Tệp kê khai

Nếu ứng dụng của bạn xác định các quyền tuỳ chỉnh trong tệp kê khai, thì Plugin Android cho Gradle thường tạo một lớp Manifest.java đưa vào các quyền tuỳ chỉnh dưới dạng hằng số chuỗi. Trình bổ trợ sẽ đóng gói lớp này cùng với ứng dụng để bạn có thể dễ dàng tham khảo những quyền đó trong thời gian chạy.

Tính năng tạo lớp tệp kê khai bị lỗi trong Plugin Android cho Gradle 3.6.0. Nếu bạn tạo ứng dụng bằng phiên bản plugin này và ứng dụng tham chiếu đến lớp tệp kê khai thì bạn có thể thấy ngoại lệ của ClassNotFoundException. Để giải quyết vấn đề này, hãy làm theo một trong những cách sau:

  • Tham chiếu đến các quyền tuỳ chỉnh theo tên đủ điều kiện. Ví dụ: "com.example.myapp.permission.DEADLY_ACTIVITY"
  • Xác định các hằng số của riêng bạn như sau:

    public final class CustomPermissions {
      public static final class permission {
        public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY";
      }
    }
    

3.5.0 (tháng 8 năm 2019)

Plugin Android cho Gradle 3.5.0, cùng với Android Studio 3.5, là một bản phát hành chính và cũng là kết quả của Project Marble, tập trung vào việc cải thiện ba lĩnh vực chính của công cụ cho nhà phát triển Android: trạng thái hệ thống, hoàn thiện tính năng và sửa lỗi. Đáng chú ý, việc cải thiện dự án tốc độ của bản dựng là tiêu điểm chính trong lần cập nhật này.

Để tìm hiểu thông tin về những nội dung này và các nội dung cập nhật khác về Project Marble, hãy đọc bài đăng trên blog dành cho nhà phát triển Android hoặc các phần bên dưới.

Phiên bản Plugin Android này yêu cầu:

Phiên bản 3.5.4 (tháng 7 năm 2020)

Bản cập nhật nhỏ này hỗ trợ khả năng tương thích với các tính năng và tùy chọn cài đặt mặc định mới của chế độ hiển thị gói trong Android 11.

Hãy xem bản ghi chú phát hành 4.0.1 để biết thông tin chi tiết.

3.5.3 (tháng 12 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.5.3, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất.

3.5.2 (tháng 11 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.5.2, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất. Để xem danh sách các bản sửa lỗi đáng chú ý, hãy đọc bài đăng liên quan trên blog Thông tin cập nhật về bản phát hành.

3.5.1 (tháng 10 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.5.1, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất. Để xem danh sách các bản sửa lỗi đáng chú ý, hãy đọc bài đăng liên quan trên blog Thông tin cập nhật về bản phát hành.

Trình xử lý chú giải gia tăng

Trình xử lý chú giải Liên kết dữ liệu hỗ trợ xử lý chú giải gia tăng nếu bạn android.databinding.incremental=true trong tệp gradle.properties. Tính năng tối ưu hoá này cải thiện hiệu suất bản dựng gia tăng. Để xem danh sách đầy đủ các trình xử lý chú giải được tối ưu hoá, hãy tham khảo bảng các trình xử lý chú giải gia tăng.

Ngoài ra, KAPT 1.3.30 trở lên cũng hỗ trợ trình xử lý chú giải gia tăng bạn có thể bật bằng cách đưa kapt.incremental.apt=true vào tệp gradle.properties.

Kiểm thử đơn vị lưu được vào bộ nhớ đệm

Khi bạn bật tính năng kiểm thử đơn vị để sử dụng các tài nguyên, tài sản và tệp kê khai của Android bằng cách thiết lập includeAndroidResources đếntrue, Plugin Android cho Gradle sẽ tạo một tệp cấu hình kiểm thử chứa các đường dẫn tuyệt đối, làm hỏng khả năng di chuyển của bộ nhớ đệm. Bạn có thể hướng dẫn trình bổ trợ tạo cấu hình kiểm thử thay thế bằng cách sử dụng đường dẫn tương đối. Phương thức này cho phép tác vụ AndroidUnitTest hoàn toàn lưu vào bộ nhớ đệm bằng cách đưa nội dung sau vào tệp gradle.properties:

android.testConfig.useRelativePath = true

Vấn đề đã biết

  • Khi sử dụng trình bổ trợ Kotlin cho Gradle 1.3.31 trở về trước, bạn có thể thấy cảnh báo sau đây khi xây dựng hoặc đồng bộ hoá dự án:

    WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced
             with 'variant.getPackageLibraryProvider()'.
    

    Để giải quyết vấn đề này, hãy nâng cấp trình bổ trợ lên phiên bản 1.3.40 trở lên.

3.4.0 (tháng 4 năm 2019)

Phiên bản Plugin Android này yêu cầu:

3.4.3 (tháng 7 năm 2020)

Bản cập nhật nhỏ này hỗ trợ khả năng tương thích với các tính năng và tùy chọn cài đặt mặc định mới của chế độ hiển thị gói trong Android 11.

Hãy xem bản ghi chú phát hành 4.0.1 để biết thông tin chi tiết.

3.4.2 (tháng 7 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.4.2, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất. Để xem danh sách các bản sửa lỗi đáng chú ý, hãy đọc bài đăng liên quan trên blog Thông tin cập nhật về bản phát hành.

3.4.1 (tháng 5 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.4.1, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất. Để xem danh sách các bản sửa lỗi đáng chú ý, hãy đọc bài đăng liên quan trên blog Thông tin cập nhật về bản phát hành.

Tính năng mới

  • Cấu hình phần phụ thuộc mới cho lệnh kiểm tra bằng trình tìm lỗi mã nguồn (lint check): Hành vi của lintChecks đã thay đổi và cấu hình phần phụ thuộc mới, lintPublish, đã được giới thiệu để cung cấp thêm quyền điều khiển các lệnh kiểm tra bằng trình tìm lỗi mã nguồn được đóng gói trong thư viện Android.

    • lintChecks: Đây là cấu hình hiện có mà bạn nên sử dụng cho các lệnh kiểm tra mã bằng trình tìm lỗi mã nguồn mà bạn chỉ muốn chạy khi xây dựng dự án cục bộ. Nếu trước đó bạn đã sử dụng cấu hình phần phụ thuộc lintChecks để đưa vào các lệnh kiểm tra mã bằng trình tìm lỗi mã nguồn trong tệp Android Archive (AAR) đã phát hành, thì bạn cần di chuyển các phần phụ thuộc đó để sử dụng cấu hình lintPublish mới được mô tả bên dưới.
    • lintPublish: Sử dụng cấu hình mới này trong các dự án thư viện cho các lệnh kiểm tra mã bằng trình tìm lỗi mã nguồn bạn muốn đưa vào AAR đã phát hành, như được minh hoạ bên dưới: Điều này có nghĩa là những dự án sử dụng thư viện cũng được áp dụng các lệnh kiểm tra mã bằng trình tìm lỗi mã nguồn trên.

    Mã mẫu sau đây sử dụng cả hai cấu hình phần phụ thuộc trong một dự án thư viện Android cục bộ.

    Groovy

    
    dependencies {
    // Executes lint checks from the ':lint' project at build time.
    lintChecks project(':lint')
    // Packages lint checks from the ':lintpublish' in the published AAR.
    lintPublish project(':lintpublish')
    }
    

    Kotlin

    
    dependencies {
    // Executes lint checks from the ':lint' project at build time.
    lintChecks(project(":lint"))
    // Packages lint checks from the ':lintpublish' in the published AAR.
    lintPublish(project(":lintpublish"))
    }
    
  • Nhìn chung, tốc độ xây dựng tổng thể các tác vụ đóng gói và ký kết sẽ cải thiện. Nếu bạn nhận thấy hiệu suất những tác vụ này giảm dần, vui lòng báo cáo lỗi.

Thay đổi về hành vi

  • Cảnh báo về việc ngừng hỗ trợ Trình bổ trợ tính năng Ứng dụng Android tức thì: Nếu bạn vẫn đang dùng trình bổ trợ com.android.feature để xây dựng ứng dụng tức thì, thì Plugin Android cho Gradle 3.4.0 sẽ gửi cảnh báo về việc ngừng hỗ trợ. Để đảm bảo bạn vẫn có thể xây dựng ứng dụng tức thì trên các phiên bản trình bổ trợ trong tương lai, hãy di chuyển ứng dụng tức thì sang sử dụngtrình bổ trợ tính năng động. Phương pháp này cũng cho phép phát hành cả bản cài đặt và ứng dụng tức thì thử nghiệm từ một Android App Bundle duy nhất.

  • R8 được bật theo mặc định: R8 tích hợp tính năng đơn giản hoá, rút gọn, làm rối mã nguồn, tối ưu hoá và tạo tệp dex tất cả chỉ trong một bước. Điều này giúp cải thiện hiệu suất của các bản dựng một cách đáng lưu ý. R8 được giới thiệu trong Plugin Android cho Gradle 3.3.0 và hiện đang được bật mặc định cho cả ứng dụng lẫn các dự án thư viện Android sử dụng trình bổ trợ 3.4.0 trở lên.

    Hình ảnh bên dưới cung cấp thông tin tổng quan cấp cao về quá trình biên dịch trước khi R8 được giới thiệu.

    Trước R8, ProGuard là một bước biên dịch riêng, tách biệt với tác vụ tạo tệp dex và đơn giản hoá.

    Hiện tại, nhờ R8, việc đơn giản hoá, rút gọn, làm rối mã nguồn, tối ưu hoá và tạo tệp dex (D8) đều được hoàn tất ở một bước, như hình minh hoạ dưới đây.

    Với R8, việc đơn giản hoá, rút gọn, làm rối mã nguồn, tối ưu hoá và tạo tệp dex đều được thực hiện trong một bước biên dịch.

    Xin lưu ý rằng R8 được thiết kế để hoạt động với các quy tắc ProGuard hiện có, vì vậy bạn có thể sẽ không cần thực hiện thêm bất kỳ hành động nào. Tuy nhiên, vì công nghệ này khác với ProGuard được thiết kế riêng cho các dự án Android, nên việc rút gọn và tối ưu hoá có thể khiến mã mà ProGuard không có bị xoá. Vì vậy, trong trường hợp hiếm gặp này, bạn có thể cần phải thêm quy tắc bổ sung để giữ lại mã đó trong đầu ra của bản dựng.

    Nếu gặp vấn đề khi sử dụng R8, hãy đọc bài viết Câu hỏi thường gặp về khả năng tương thích với R8 để xem có giải pháp nào không. Nếu không tìm thấy giải pháp, vui lòng báo cáo lỗi. Bạn có thể tắt R8 bằng cách thêm một trong các dòng sau vào tệp gradle.properties của dự án:

    # Disables R8 for Android Library modules only.
    android.enableR8.libraries = false
    # Disables R8 for all modules.
    android.enableR8 = false
    
  • ndkCompile không dùng nữa: Bạn sẽ gặp lỗi bản dựng nếu cố sử dụngndkBuild để biên dịch thư viện gốc. Thay vào đó, bạn nên sử dụng CMake hoặc ndk-build đểThêm mã C và C++ vào dự án.

Vấn đề đã biết

  • Việc sử dụng đúng tên gói duy nhất hiện không được thực thi nhưng sẽ áp dụng nghiêm ngặt hơn trên các phiên bản trình bổ trợ sau này. Trên Plugin Android cho Gradle phiên bản 3.4.0, bạn có thể chọn tham gia để kiểm tra xem dự án của bạn có khai báo tên gói được chấp nhận hay không bằng cách bổ sung dòng dưới đây vào tệp gradle.properties .

    android.uniquePackageNames = true
    

    Để tìm hiểu thêm về cách đặt tên gói thông qua Plugin Android cho Gradle, hãy xem nội dung Thiết lập mã ứng dụng.

3.3.0 (tháng 1 năm 2019)

Phiên bản Plugin Android này yêu cầu:

3.3.3 (tháng 7 năm 2020)

Bản cập nhật nhỏ này hỗ trợ khả năng tương thích với các tính năng và tùy chọn cài đặt mặc định mới của chế độ hiển thị gói trong Android 11.

Hãy xem bản ghi chú phát hành 4.0.1 để biết thông tin chi tiết.

3.3.2 (tháng 3 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.3.2, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất. Để xem danh sách các bản sửa lỗi đáng chú ý, hãy đọc bài đăng liên quan trên blog Thông tin cập nhật về bản phát hành.

3.3.1 (tháng 2 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.3.1, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất.

Tính năng mới

  • Cải thiện tính năng đồng bộ hoá classpath: Khi giải quyết các phần phụ thuộc trên classpath thời gian chạy và thời gian biên dịch, Plugin Android cho Gradle cố gắng sửa một số xung đột phiên bản xuôi dòng cho các phần phụ thuộc xuất hiện trên nhiều classpath.

    Ví dụ: nếu đường dẫn lớp thời gian chạy bao gồm Thư viện A phiên bản 2.0 và classpath biên dịch bao gồm Thư viện A phiên bản 1.0, thì trình bổ trợ sẽ tự động cập nhật phần phụ thuộc trên classpath lớp biên dịch thành Thư viện A phiên bản 2.0 để tránh lỗi.

    Tuy nhiên, nếu classpath thời gian chạy bao gồm Thư viện A phiên bản 1.0 và quá trình biên dịch bao gồm Thư viện A phiên bản 2.0, thì trình bổ trợ sẽ không hạ cấp phần phụ thuộc vào classpath biên dịch sang Thư viện A phiên bản 1.0 và bạn sẽ nhận được lỗi. Để tìm hiểu thêm, hãy xem nội dung Khắc phục xung đột giữa các classpath.

  • Cải thiện tính năng biên dịch Java gia tăng khi sử dụng trình xử lý chú giải: Bản cập nhật này giúp giảm thời gian xây dựng bằng cách cải thiện khả năng hỗ trợ chế độ biên dịch Java gia tăng khi sử dụng trình xử lý chú giải.

    • Đối với các dự án sử dụng Kapt (cùng với hầu hết các dự án chỉ dành cho Kotlin và dự án kết hợp Kotlin-Java): Chúng tôi sẽ bật tính năng biên dịch Java gia tăng, ngay cả khi bạn dùng phương thức liên kết dữ liệu hoặc trình bổ trợ retro-lambda. Hoạt động xử lý chú giải theo tác vụ Kapt chưa được gia tăng.
    • Đối với các dự án không sử dụng Kapt (các dự án chỉ dành cho Java): Nếu tất cả trình xử lý chú giải bạn sử dụng đều hỗ trợ xử lý chú thích gia tăng, biên dịch Java gia tăng sẽ được bật theo mặc định. Để theo dõi quá trình sử dụng trình xử lý chú giải gia tăng, hãy xem nội dung Vấn đề Gradle 5277.

      Tuy nhiên, nếu một hoặc nhiều trình xử lý chú giải không hỗ trợ các bản dựng gia tăng, thì chế độ biên dịch Java gia tăng sẽ không được bật. Thay vào đó, bạn có thể đưa cờ này vào tệp gradle.properties:

      android.enableSeparateAnnotationProcessing=true
      

      Khi bạn đưa vào cờ này, Plugin Android cho Gradle sẽ thực thi các trình xử lý chú giải trong một tác vụ riêng và cho phép tác vụ biên dịch Java chạy theo mức độ tăng dần.

  • Cung cấp thông tin gỡ lỗi rõ ràng hơn khi bạn cần sử dụng API lỗi thời: Trình bổ trợ phát hiện bạn đang sử dụng API không còn được hỗ trợ, nhưng vẫn có thể cung cấp thông tin chi tiết để giúp xác định vị trí API đó đang được sử dụng. Để xem thông tin bổ sung, bạn cần đưa những nội dung sau vào tệp gradle.properties của dự án:

    android.debug.obsoleteApi=true
    

    Bạn cũng có thể bật cờ bằng cách chuyển -Pandroid.debug.obsoleteApi=true từ dòng lệnh.

  • Bạn có thể chạy kiểm thử đo lường trên các mô-đun tính năng từ dòng lệnh.

Thay đổi về hành vi

  • Cấu hình tác vụ trì hoãn: Trình bổ trợ hiện sử dụng API tạo tác vụ mới của Gradle để tránh khởi chạy và định cấu hình các tác vụ không cần thiết để hoàn thành hoạt động xây dựng hiện tại (hoặc các tác vụ không có trên biểu đồ thực thi tác vụ). Ví dụ: nếu bạn có nhiều biến thể xây dựng, chẳng hạn như các biến thể xây dựng "bản phát hành" và "gỡ lỗi", đồng thời bạn đang xây dựng phiên bản "gỡ lỗi" của ứng dụng, trình bổ trợ sẽ tránh việc khởi chạy và định cấu hình tác vụ cho phiên bản "phát hành" của ứng dụng.

    Việc gọi một số phương thức cũ trong các Variant API, chẳng hạn như variant.getJavaCompile(), vẫn có thể bắt buộc định cấu hình tác vụ. Để đảm bảo rằng bản dựng được tối ưu hoá cho cấu hình tác vụ trì hoãn, hãy gọi các phương thức mới để thay vì trả về đối tượng TaskProvider, thì sẽ trả variant.getJavaCompileProvider().

    Nếu bạn thực thi các tác vụ bản dựng tuỳ chỉnh, hãy tìm hiểu cách thích ứng với API tạo tác vụ mới của Gradle.

  • Đối với một loại hình xây dựng cụ thể, khi thiết lập useProguard false, trình bổ trợ hiện sẽ sử dụng R8 thay vì ProGuard để rút gọn và làm rối mã nguồn cùng tài nguyên của ứng dụng. Để tìm hiểu thêm về R8, hãy đọc bài đăng trên blog từ Blog của nhà phát triển Android.

  • Tạo lớp R nhanh hơn cho các dự án thư viện: Trước đây, trình bổ trợ Android cho Gradle sẽ tạo một tệp R.java cho từng phần phụ thuộc của dự án, sau đó biên dịch các lớp R đó cùng với các phần phụ thuộc của các lớp khác trong ứng dụng. Trình bổ trợ này hiện tạo tệp JAR chứa trực tiếp lớp R được biên dịch của ứng dụng mà không cần xây dựng trước các lớp R.java trung gian. Tính năng tối ưu hoá này có thể cải thiện đáng kể hiệu suất bản dựng cho các dự án có nhiều dự án thư viện con và phần phụ thuộc, đồng thời cải thiện tốc độ lập chỉ mục trong Android Studio.

  • Khi xây dựng một Android App Bundle, APK được tạo từ gói ứng dụng đó nhắm mục tiêu Android 6.0 (API cấp 23) trở lên hiện đã bao gồm các phiên bản thư viện gốc không nén theo mặc định. Việc tối ưu hoá này nhằm tránh để thiết bị tạo bản sao của thư viện, nhờ đó ứng dụng chiếm ít dung lượng hơn. Tuy nhiên, nếu bạn muốn vô hiệu hoá tính năng tối ưu hoá này, hãy bổ sung nội dung sau vào tệp gradle.properties:

    android.bundle.enableUncompressedNativeLibs = false
    
  • Trình bổ trợ thực thi các phiên bản tối thiểu của một số trình bổ trợ bên thứ ba.

  • Đồng bộ hoá dự án một biến thể: Việc đồng bộ hoá dự án với cấu hình bản dựng là một bước quan trọng để Android Studio có thể hiểu cấu trúc dự án được xây dựng như thế nào. Tuy nhiên, đối với các dự án lớn quá trình này có thể tốn nhiều thời gian. Nếu dự án của bạn sử dụng nhiều biến thể xây dựng, giờ đây, bạn có thể tối ưu hoá tính năng đồng bộ hoá dự án bằng cách chỉ giới hạn các biến thể đó thành biến thể bạn hiện đã chọn.

    Bạn cần sử dụng Android Studio 3.3 trở lên với Plugin Android cho Gradle 3.3.0 trở lên để bật tính năng tối ưu hoá này. Khi bạn đáp ứng các yêu cầu trên, IDE sẽ nhắc bạn bật tính năng tối ưu hoá khi đồng bộ hoá dự án. Tính năng tối ưu hoá cũng được bật theo mặc định trên các dự án mới.

    Để bật tính năng tối ưu hoá này theo cách thủ công, hãy nhấp vàoFile > Settings > Experimental > Gradle (Tệp > Cài đặt > Thử nghiệm > Gradle) (Android Studio > Preferences > Experimental > Gradle on a Mac) (Android Studio > Tuỳ chọn > Thử nghiệm > Gradle trên máy Mac) và chọn hộp đánh dấu Only sync the active variant (Chỉ đồng bộ hoá biến thể đang hoạt động).

    Lưu ý: Tính năng tối ưu hoá này hỗ trợ đầy đủ các dự án chứa các ngôn ngữ Java và C++, đồng thời hỗ trợ một số tính năng dành cho Kotlin. Khi bật tính năng tối ưu hoá cho các dự án có nội dung Kotlin, tính năng đồng bộ hoá Gradle sẽ quay lại sử dụng các biến thể đầy đủ trong nội bộ.

  • Tự động tải các gói SDK bị thiếu: Chúng tôi đã mở rộng chức năng này để hỗ trợ NDK. Để tìm hiểu thêm, hãy đọc bài viết Tự động tải các gói bị thiếu bằng Gradle.

Bản sửa lỗi

  • Plugin Android cho Gradle 3.3.0 khắc phục những vấn đề sau:

    • Mặc dù đã bật Jetifier, quy trình xây dựng vẫn gọi android.support.v8.renderscript.RenderScript thay vì phiên bản AndroidX.
    • Sự cố do androidx-rs.jar gây ra bao gồm cả gói tĩnh annotation.AnyRes
    • Khi sử dụng RenderScript, bạn không còn phải thiết lập phiên bản Công cụ tạo SDK theo cách thủ công trong các tệp build.gradle

3.2.0 (Tháng 9 năm 2018)

Phiên bản Plugin Android này yêu cầu:

Phiên bản 3.2.1 (tháng 10 năm 2018)

Với bản cập nhật này, bạn không cần chỉ định phiên bản cho Công cụ tạo SDK. Trình bổ trợ Gradle của Android hiện sử dụng phiên bản 28.0.3 theo mặc định.

Tính năng mới

  • Hỗ trợ xây dựng Android App Bundle: Gói ứng dụng là một định dạng tải lên mới bao gồm tất cả tài nguyên và mã đã biên dịch của ứng dụng, đồng thời tạm ngưng việc tạo và ký APK vào Cửa hàng Google Play. Bạn không còn phải tạo, ký và quản lý nhiều APK, và người dùng sẽ có thể nhận các tệp tải xuống nhỏ hơn được tối ưu hoá cho thiết bị. Để tìm hiểu thêm, hãy đọc bài viết Giới thiệu về Android App Bundle.

  • Hỗ trợ tốc độ xây dựng gia tăng khi sử dụng trình xử lý chú giải: AnnotationProcessorOptions DSL hiện mở rộng CommandLineArgumentProvider , cho phép bạn hoặc tác giả trình xử lý chú giải chú giải các đối số cho trình xử lý bằng cách sử dụng chú giải kiểu thuộc tính bản dựng gia tăng. Việc sử dụng các chú giải này sẽ cải thiện độ chính xác và hiệu suất của các bản dựng sạch gia tăng được lưu vào bộ nhớ đệm. Để tìm hiểu thêm, hãy đọc phần Truyền đối số tới trình xử lý chú giải.

  • Công cụ di chuyển cho AndroidX: Khi sử dụng Plugin Android cho Gradle 3.2.0 với Android 3.2 trở lên, bạn có thể di chuyển các phần phụ thuộc cục bộ và Maven của dự án để sử dụng các thư viện AndroidX mới bằng cách chọn Refactor >Migrate to AndroidX (Tái cấu trúc >Di chuyển sang AndroidX) từ thanh trình đơn. Việc sử dụng công cụ di chuyển này cũng thiết lập các cờ sau thành true trong tệp gradle.properties:

    • android.useAndroidX: Khi được thiết lập thành true, Plugin Android sẽ sử dụng thư viện AndroidX thích hợp thay vì Thư viện hỗ trợ. Khi cờ này không được chỉ định, theo mặc định trình bổ trợ sẽ thiết lập cờ này thành false.
    • android.enableJetifier: Khi bạn thiết lập thành true, Plugin Android sẽ tự động di chuyển các thư viện hiện có của bên thứ ba để sử dụng AndroidX bằng cách ghi lại tệp nhị phân. Khi cờ này không được chỉ định, theo mặc định trình bổ trợ sẽ thiết lập thành false. Bạn chỉ có thể thiết lập cờ này thành true khi android.useAndroidX cũng được thiết lập thành true. Nếu không, bạn sẽ gặp lỗi bản dựng.

    Để tìm hiểu thêm, hãy đọc bài viết tổng quan về AndroidX.

  • Trình rút gọn mã mới, R8: R8 là một công cụ mới giúp rút gọn và làm rối mã thay thế ProGuard. Bạn có thể bắt đầu sử dụng phiên bản xem trước của R8 bằng cách đưa những nội dung sau vào tệp gradle.properties của dự án:

    Groovy

    
    android.enableR8 = true
    

    Kotlin

    
    android.enableR8 = true
    

Thay đổi về hành vi

  • Hiện tuỳ chọn đơn giản hoá bằng D8 được bật theo mặc định.
  • AAPT2 hiện được đưa vào kho lưu trữ Maven của Google. Để sử dụng AAPT2, hãy đảm bảo bạn có phần phụ thuộc google() trong tệp build.gradle như sau:

    Groovy

    
    buildscript {
        repositories {
            google() // here
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.2.0'
        }
    }
    allprojects {
        repositories {
            google() // and here
            jcenter()
    }
    

    Kotlin

    
    buildscript {
        repositories {
            google() // here
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.2.0'
        }
    }
    allprojects {
        repositories {
            google() // and here
            jcenter()
    }
    
  • Cấu hình multidex gốc hiện được bật theo mặc định. Các phiên bản trước của Android Studio đã bật chế độ multidex gốc khi triển khai phiên bản gỡ lỗi của ứng dụng cho thiết bị chạy API Android cấp 21 trở lên. Hiện tại, cho dù bạn đang triển khai một thiết bị hay xây dựng một APK để phát hành, Plugin Android cho Gradle sẽ bật chế độ multidex gốc cho tất cả những mô-đun thiết lập minSdkVersion=21 trở lên.

  • Trình bổ trợ này thực thi phiên bản tối thiểu của trình bổ trợ protobuf (0.8.6), Kotlin trình bổ trợ (1.2.50) và trình bổ trợ Crashlytics (1.25.4).

  • Trình bổ trợ mô-đun tính năng,com.android.feature, hiện chỉ thực thi việc sử dụng chữ cái, chữ số và dấu gạch dưới khi chỉ định tên mô-đun. Ví dụ: nếu tên mô-đun tính năng có dấu gạch ngang, bạn sẽ gặp lỗi bản dựng. Hành vi này khớp với hành vi của trình bổ trợ tính năng động.

Bản sửa lỗi

  • JavaCompile hiện có thể lưu được vào bộ nhớ đệm trong các dự án có liên kết dữ liệu. (Vấn đề #69243050)
  • Cải thiện thao tác tránh việc biên dịch đối với những mô-đun thư viện có liên kết dữ liệu (Vấn đề #77539932)
  • Hiện bạn có thể bật lại định cấu hình theo yêu cầu nếu đã vô hiệu hoá tính năng này trong các phiên bản cũ do một số lỗi bản dựng không thể dự đoán. (Vấn đề #77910727)

3.1.0 (tháng 3 năm 2018)

Phiên bản Plugin Android này yêu cầu:

  • Gradle 4.4 trở lên. Để tìm hiểu thêm, hãy đọc phần cập nhật Gradle.
  • Công cụ tạo SDK 27.0.3 trở lên. Xin lưu ý rằng bạn không cần chỉ định phiên bản cho công cụ tạo bản dựng bằng thuộc tính android.buildToolsVersion vì theo mặc định, trình bổ trợ sẽ sử dụng phiên bản tối thiểu bắt buộc.

Trình biên dịch DEX mới: D8

Theo mặc định, Android Studio hiện sử dụng trình biên dịch DEX mới có tên D8. Biên dịch DEX là quá trình chuyển đổi .class mã byte thành .dex mã byte cho Android Runtime (hoặc Dalvik cho các phiên bản cũ của Android). So với trình biên dịch trước đây có tên DX, D8 biên dịch nhanh hơn và tạo các tệp DEX nhỏ hơn, trong khi vẫn có hiệu suất thời gian chạy ứng dụng bằng hoặc cao hơn.

D8 sẽ không thay đổi quy trình phát triển ứng dụng hằng ngày của bạn. Tuy nhiên, nếu bạn gặp bất kỳ vấn đề nào liên quan đến trình biên dịch mới, vui lòng báo cáo lỗi. Bạn có thể tạm thời vô hiệu hoá D8 và sử dụng DX bằng cách đưa nội dung sau vào tệp gradle.properties của dự án:

android.enableD8=false

Đối với các dự án sử dụng các tính năng ngôn ngữ Java 8, tính năng đơn giản hoá gia tăng được bật theo mặc định. Bạn có thể vô hiệu hoá tính năng này bằng cách chỉ định thông tin sau trong tệp gradle.properties của dự án:

android.enableIncrementalDesugaring=false.

Người dùng xem trước: Nếu bạn đang sử dụng phiên bản xem trước của D8, hãy lưu ý rằng phiên bản này hiện biên dịch dựa trên các thư viện được đưa vào công cụ tạo SDK — không phải JDK. Vì vậy, nếu bạn đang truy cập những API có trong JDK nhưng không có trong thư viện công cụ tạo SDK, bạn sẽ gặp lỗi biên dịch.

Thay đổi về hành vi

  • Khi xây dựng nhiều APK mà mỗi APK nhắm mục tiêu đến một ABI khác nhau, theo mặc định trình bổ trợ sẽ không còn tạo APK cho các ABI sau: mips, mips64armeabi.

    Nếu muốn xây dựng APK nhắm mục tiêu đến các ABI này, bạn phải sử dụng NDK r16b trở xuống và chỉ định ABI trong tệp build.gradle, như minh hoạ ở dưới:

Groovy

  splits {
      abi {
          include 'armeabi', 'mips', 'mips64'
          ...
      }
  }

Kotlin

  splits {
      abi {
          include("armeabi", "mips", "mips64")
          ...
      }
  }
  • Bộ nhớ đệm bản dựng của Plugin Android hiện sẽ xoá các mục bộ nhớ đệm cũ tồn tại hơn 30 ngày.
  • Thao tác truyền "auto" cho resConfig không còn tự động chọn các tài nguyên chuỗi để đóng gói vào APK. Nếu bạn tiếp tục sử dụng "auto", trình bổ trợ này sẽ đóng gói tất cả tài nguyên chuỗi mà ứng dụng và các phần phụ thuộc của ứng dụng đó cung cấp. Do đó, nên chỉ định từng ngôn ngữ mà bạn muốn trình bổ trợ đóng gói cho APK.
  • Vì các mô-đun cục bộ không thể phụ thuộc vào APK thử nghiệm của ứng dụng, nên thao tác bổ sung các phần phụ thuộc vào kiểm thử đo lường bằng cách sử dụng cấu hình androidTestApi thay vì androidTestImplementation sẽ khiến Gradle đưa ra cảnh báo sau:

    Groovy

    WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'

    Kotlin

    WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'

Sửa lỗi

  • Sửa vấn đề Android Studio không nhận dạng chính xác các phần phụ thuộc trong bản dựng kết hợp.
  • Sửa vấn đề lỗi đồng bộ hoá dự án khi tải Plugin Android nhiều lần trong một bản dựng – ví dụ: khi nhiều dự án con mà mỗi dự án đưa vào Plugin Android trong classpath tập lệnh buildscript.

3.0.0 (tháng 10 năm 2017)

Plugin Android cho Gradle 3.0.0 bao gồm nhiều thay đổi nhằm giải quyết các vấn đề hiệu suất của các dự án lớn.

Ví dụ: trên một dự án mẫu cơ bản có khoảng 130 mô-đun và một số lượng lớn các phần phụ thuộc từ bên ngoài (nhưng không có mã hoặc tài nguyên), bạn có thể trải nghiệm các điểm cải thiện hiệu suất tương tự như sau:

Phiên bản plugin Android + phiên bản Gradle Plugin Android 2.2.0 + Gradle 2.14.1 Plugin Android 2.3.0 + Gradle 3.3 Plugin Android 3.0.0 + Gradle 4.1
Cấu hình (ví dụ: chạy ./gradlew --help) ~2 phút ~9 giây ~2,5 giây
Thay đổi Java 1 dòng (thay đổi triển khai) ~2 phút 15 giây ~29 giây ~6,4 giây

Một số thay đổi trong số này sẽ làm hỏng các bản dựng hiện hữu. Vì vậy, bạn nên cân nhắc di chuyển dự án trước khi sử dụng trình bổ trợ mới.

Nếu bạn không thấy các điểm cải thiện hiệu suất được mô tả ở trên, vui lòng gửi lỗi và đính kèm dấu vết bản dựng đang sử dụng bằng Trình phân tích tài nguyên Gradle.

Phiên bản Plugin Android này yêu cầu:

  • Gradle 4.1 trở lên. Để tìm hiểu thêm, hãy đọc phần cập nhật Gradle.
  • Công cụ tạo SDK 26.0.2 trở lên. Với bản cập nhật này, bạn không cần chỉ định phiên bản cho công cụ tạo bản dựng – theo mặc định, trình bổ trợ sử dụng phiên bản tối thiểu bắt buộc. Do đó, hiện bạn có thể xoá thuộc tính android.buildToolsVersion.

Phiên bản 3.0.1 (tháng 11 năm 2017)

Đây là bản cập nhật nhỏ nhằm hỗ trợ Android Studio 3.0.1, bao gồm các bản sửa lỗi chung cùng các điểm cải thiện hiệu suất.

Tối ưu hoá:

  • Cải thiện tính năng tải song song cho các dự án nhiều mô-đun thông qua biểu đồ tác vụ chi tiết.
  • Khi thay đổi phần phụ thuộc, Gradle sẽ xây dựng bản dựng nhanh hơn bằng cách không biên dịch lại những mô-đun không có quyền truy cập vào API của phần phụ thuộc đó. Bạn nên hạn chế những phần phụ thuộc làm rò rỉ API của các mô-đun đó bằng cách sử dụng các cấu hình phần phụ thuộc mới của Gradle :implementation, api, compileOnlyruntimeOnly ,
  • Tốc độ bản dựng gia tăng nhanh hơn do tạo tệp DEX cho mỗi lớp. Hiện mỗi lớp được biên dịch thành các tệp DEX riêng biệt và chỉ các lớp đã được sửa đổi mới được tạo lại tệp DEX. Bạn cũng nên cải thiện tốc độ bản dựng cho các ứng dụng thiết lập minSdkVersion từ 20 trở xuống và sử dụng tính năng multidex của các phiên bản Android cũ.
  • Cải thiện tốc độ bản dựng bằng cách tối ưu hoá một số tác vụ để sử dụng đầu ra lưu tại bộ nhớ đệm. Để tận dụng tính năng tối ưu hoá này, trước tiên bạn cần bật bộ nhớ đệm của bản dựng Gradle.
  • Cải thiện tính năng xử lý tài nguyên gia tăng bằng AAPT2 (hiện được bật theo mặc định). Nếu bạn gặp vấn đề khi sử dụng AAPT2, vui lòng báo cáo lỗi. Bạn cũng có thể vô hiệu hoá AAPT2 bằng cách thiết lập android.enableAapt2=false trong tệp gradle.properties và tái khởi động trình nền Gradle bằng cách chạy ./gradlew --stop từ dòng lệnh.

Tính năng mới

  • Quản lý phần phụ thuộc có thể nhận biết biến thể. Khi xây dựng một biến thể nhất định của một mô-đun, hiện trình bổ trợ sẽ tự động kết nối biến thể của các phần phụ thuộc mô-đun thư viện cục bộ với biến thể của mô-đun đang xây dựng.
  • Bao gồm một trình bổ trợ Mô-đun tính năng mới để hỗ trợ Ứng dụng Android tức thì và SDK Ứng dụng Android tức thì (bạn có thể tải các SDK này xuống bằng trình quản lý SDK) , Để tìm hiểu thêm về cách tạo mô-đun Tính năng bằng trình bổ trợ mới, hãy đọc phần Cấu trúc của một ứng dụng tức thì có nhiều tính năng.
  • Tích hợp tính năng hỗ trợ sử dụng một số tính năng ngôn ngữ và thư viện Java 8. HIện đã ngừng hoạt động và không còn bắt buộc người dùng phải sử dụng Jack. Trước tiên, bạn nên vô hiệu hoá Jack để sử dụng dịch vụ hỗ trợ Java 8 cải thiện được tích hợp sẵn trong chuỗi công cụ mặc định. Để biết thêm thông tin, hãy đọc bài viết Sử dụng các tính năng ngôn ngữ Java 8.
  • Hỗ trợ thêm tính năng chạy kiểm thử bằng Android Test Orchestrator. Chương trình này cho phép bạn chạy từng kiểm thử của ứng dụng ngay trong lệnh gọi Instrumentation riêng. Vì mỗi kiểm thử chạy trong thực thể Instrumentation riêng, nên mọi trạng thái dùng chung giữa các kiểm thử sẽ không tích lũy vào CPU hoặc bộ nhớ của thiết bị. Ngay cả khi một kiểm thử gặp sự cố, thì thực thể riêng Instrumentation của kiểm thử này cũng chỉ bị gỡ bỏ, vì vậy các kiểm thử khác vẫn sẽ chạy như trước.
    • Bổ sung testOptions.execution để xác định xem cần sử dụng tính năng tổ chức kiểm thử trên thiết bị hay không. Nếu muốn sử dụng Android Test Orchestrator, bạn cần chỉ định ANDROID_TEST_ORCHESTRATOR như sau. Theo mặc định, thuộc tính này được thiết lập thành HOST sẽ vô hiệu hoá tính năng tổ chức trên thiết bị và là phương thức chuẩn để chạy kiểm thử.

Groovy

android {
  testOptions {
    execution 'ANDROID_TEST_ORCHESTRATOR'
  }
}

Kotlin

android {
  testOptions {
    execution = "ANDROID_TEST_ORCHESTRATOR"
  }
}
  • Cấu hình phần phụ thuộc androidTestUtil mới cho phép bạn cài đặt một APK trình trợ giúp kiểm thử khác trước khi chạy các kiểm thử đo lường, chẳng hạn như Android Test Orchestrator:

Groovy

dependencies {
  androidTestUtil 'com.android.support.test:orchestrator:1.0.0'
  ...
}

Kotlin

dependencies {
  androidTestUtil("com.android.support.test:orchestrator:1.0.0")
  ...
}
  • Thêm testOptions.unitTests.includeAndroidResources để hỗ trợ kiểm thử đơn vị có yêu cầu tài nguyên Android, chẳng hạn như Roboelectric. Khi bạn thiết lập thuộc tính này thành true, trình bổ trợ sẽ thực hiện hợp nhất tài nguyên, tài sản và tệp kê khai trước khi chạy kiểm thử đơn vị. Sau đó, kiểm thử có thể kiểm tra com/android/tools/test_config.properties trên classpath cho các khoá sau:
    • android_merged_assets: đường dẫn tuyệt đối đến thư mục tài sản hợp nhất.

      Lưu ý: Đối với các mô-đun thư viện, tài sản hợp nhất không chứa tài sản của các phần phụ thuộc (xem vấn đề #65550419).

    • android_merged_manifest: đường dẫn tuyệt đối đến tệp kê khai hợp nhất.
    • android_merged_resources: đường dẫn tuyệt đối đến thư mục tài nguyên hợp nhất, chứa tất cả tài nguyên và phần phụ thuộc của mô-đun.
    • android_custom_package: tên gói của lớp R cuối cùng. Nếu bạn sửa đổi ID ứng dụng một cách linh động, thì tên gói này có thể không khớp với thuộc tính package trong tệp kê khai của ứng dụng.
  • Hỗ trợ dành cho phông chữ dưới dạng tài nguyên (là một tính năng mới được giới thiệu trong Android 8.0 (API cấp 26)).
  • Hỗ trợ các APK theo ngôn ngữ cụ thể bằng SDK Ứng dụng Android tức thì 1.1 trở lên.
  • Hiện bạn có thể thay đổi thư mục đầu ra cho dự án hệ thống xây dựng gốc bên ngoài như sau:

Groovy

android {
    ...
    externalNativeBuild {
        // For ndk-build, instead use the ndkBuild block.
        cmake {
            ...
            // Specifies a relative path for outputs from external native
            // builds. You can specify any path that's not a subdirectory
            // of your project's temporary build/ directory.
            buildStagingDirectory "./outputs/cmake"
        }
    }
}

Kotlin

android {
    ...
    externalNativeBuild {
        // For ndk-build, instead use the ndkBuild block.
        cmake {
            ...
            // Specifies a relative path for outputs from external native
            // builds. You can specify any path that's not a subdirectory
            // of your project's temporary build/ directory.
            buildStagingDirectory = "./outputs/cmake"
        }
    }
}
  • Hiện bạn có thể sử dụng CMake 3.7 trở lên khi xây dựng các dự án gốc từ Android Studio.
  • Cấu hình phần phụ thuộc lintChecks mới cho phép bạn tạo tệp JAR xác định các quy tắc tìm lỗi mã nguồn tuỳ chỉnh và đóng gói tệp này vào các dự án AAR và APK. Các quy tắc tìm lỗi mã nguồn tuỳ chỉnh phải thuộc về một dự án riêng biệt xuất ra một tệp JAR duy nhất và chỉ bao gồm các phần phụ thuộc compileOnly. Các mô-đun thư viện và ứng dụng khác sau đó có thể phụ thuộc vào dự án tìm lỗi mã nguồn bằng cách sử dụng cấu hình lintChecks:

Groovy

dependencies {
    // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
    // and package it with your module. If the module is an Android library,
    // other projects that depend on it automatically use the lint checks.
    // If the module is an app, lint includes these rules when analyzing the app.
    lintChecks project(':lint-checks')
}

Kotlin

dependencies {
    // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
    // and package it with your module. If the module is an Android library,
    // other projects that depend on it automatically use the lint checks.
    // If the module is an app, lint includes these rules when analyzing the app.
    lintChecks(project(":lint-checks"))
}

Thay đổi về hành vi

  • Plugin Android 3.0.0 sẽ xoá một số API nhất định và bản dựng sẽ bị hỏng nếu bạn sử dụng các API này. Ví dụ: bạn không thể sử dụng các Variant API để truy cập vào outputFile() các đối tượng hoặc sử dụng processManifest.manifestOutputFile() để lấy tệp kê khai cho từng biến thể. Để tìm hiểu thêm, hãy đọc bài viết Các thay đổi về API.
  • Bạn không cần chỉ định phiên bản cho công cụ xây dựng (do đó, bạn có thể xoá thuộc tính android.buildToolsVersion). Theo mặc định, trình bổ trợ này tự động sử dụng phiên bản công cụ xây dựng tối thiểu bắt buộc cho phiên bản Plugin Android bạn đang sử dụng.
  • Hiện bạn có thể bật/vô hiệu hoá tính năng tự động nén tệp PNG trong khối buildTypes như sau. Theo mặc định, tính năng tự động nén tệp PNG được bật cho tất cả bản dựng ngoại trừ các bản gỡ lỗi vì các bản này sẽ tăng thời gian xây dựng cho các dự án chứa nhiều tệp PNG. Vì vậy, để cải thiện thời gian xây dựng cho các loại hình xây dựng khác, bạn nên vô hiệu hoá tính năng tự động nén PNG hoặc chuyển đổi hình ảnh thành WebP.

Groovy

android {
  buildTypes {
    release {
      // Disables PNG crunching for the release build type.
      crunchPngs false
    }
  }
}

Kotlin

android {
  buildTypes {
    release {
      // Disables PNG crunching for the release build type.
      isCrunchPngs = false
    }
  }
}
  • Plugin Android hiện tự động xây dựng các mục tiêu thực thi mà bạn định cấu hình trong các dự án CMake bên ngoài.
  • Bây giờ, bạn phải bổ sung trình xử lý chú giải vào classpath của trình xử lý bằng cách sử dụng cấu hình phần phụ thuộc annotationProcessor.
  • Việc sử dụng ndkCompile không dùng nữa hiện đã bị hạn chế hơn. Thay vào đó, nên chuyển sang sử dụng CMake hoặc ndk-build để biên dịch mã gốc mà bạn muốn đóng gói vào APK. Để tìm hiểu thêm, hãy đọc phần Di chuyển từ ndkcompile.

2.3.0 (Tháng 2 năm 2017)

2.3.3 (tháng 6 năm 2017)

Đây là một bản cập nhật nhỏ bổ sung khả năng tương thích với Android Studio 2.3.3.

2.3.2 (tháng 5 năm 2017)

Đây là một bản cập nhật nhỏ bổ sung khả năng tương thích với Android Studio 2.3.2.

2.3.1 (tháng 4 năm 2017)

Đây là bản cập nhật nhỏ Plugin Android 2.3.0 sửa sự cố một số thiết bị Android thực tế không hoạt động ổn định khi dùng Tính năng Chạy tức thì (xem Vấn đề 235879).

Phần phụ thuộc:
Mới:
  • Sử dụng Gradle 3.3, trong đó có các điểm cải thiện hiệu suất và tính năng mới. Để biết thêm chi tiết, hãy xem Ghi chú phát hành Gradle.
  • Xây dựng bộ nhớ đệm: lưu trữ một số đầu ra trình bổ trợ Android tạo khi xây dựng dự án (chẳng hạn như các tệp AAR chưa đóng gói và các phần phụ thuộc từ xa đã được chuyển sang định dạng .dex). Hệ thống xây dựng chỉ cần sử dụng những tệp đã lưu vào bộ nhớ đệm trong các lần xây dựng tiếp theo thay vì phải tạo lại. Do đó, trong lúc sử dụng bộ nhớ đệm, bản dựng sạch sẽ hoạt động nhanh hơn. Các dự án sử dụng Plugin Android 2.3.0 trở lên sử dụng bộ nhớ đệm bản dựng theo mặc định. Để tìm hiểu thêm, hãy đọc bài viết Cải thiện tốc độ bản dựng bằng bộ nhớ đệm.
    • Bao gồm một tác vụ cleanBuildCache sẽ xoá bộ nhớ đệm bản dựng.
    • Nếu đang dùng phiên bản thử nghiệm của bộ nhớ đệm bản dựng (có trong các phiên bản Plugin cũ hơn), bạn nên cập nhật Plugin lên phiên bản mới nhất.
Các thay đổi:

2.2.0 (Tháng 9 năm 2016)

Phần phụ thuộc:
Mới:
  • Sử dụng Gradle 2.14.1, trong đó có các điểm cải thiện hiệu suất và tính năng mới, đồng thời khắc phục một lỗ hổng bảo mật cho phép đẩy lên báo cáo đặc quyền cục bộ khi sử dụng trình nền Gradle. Để biết thêm chi tiết, hãy xem Ghi chú phát hành Gradle.
  • Gradle hiện cho phép bạn liên kết đến các nguồn gốc và biên soạn thư viện gốc bằng cách sử dụng CMake hoặc ndk-build bằng cách sử dụng externalNativeBuild {} DSL. Sau khi xây dựng các thư viện gốc, Gradle sẽ đóng gói vào APK. Để tìm hiểu thêm về cách sử dụng CMake và ndk-build bằng Gradle, hãy đọc bài viết Bổ sung mã C và C++ vào dự án.
  • Khi bạn chạy một bản dựng từ dòng lệnh, Gradle hiện sẽ cố gắng tự động tải mọi thành phần hoặc bản cập nhật SDK bị thiếu mà dự án đang cần. Để tìm hiểu thêm, hãy đọc phần Tự động tải các gói còn thiếu bằng Gradle.
  • Tính năng lưu thử nghiệm mới vào bộ nhớ đệm cho phép Gradle tăng tốc thời gian xây dựng khi chuyển sang định dạng .dex, lưu trữ và tái sử dụng những phiên bản chuyển sang định dạng .dex của thư viện. Để tìm hiểu thêm về cách sử dụng tính năng thử nghiệm này, hãy đọc hướng dẫn Xây dựng bộ nhớ đệm.
  • Cải thiện hiệu suất bản dựng bằng cách sử dụng một quy trình đóng gói mặc định mới có khả năng nén, ký và căn chỉnh nén trong một tác vụ. Bạn có thể quay lại sử dụng các công cụ đóng gói cũ bằng cách bổ sung android.useOldPackaging=true vào tệp gradle.properties. Khi sử dụng công cụ đóng gói mới, bạn không thể thực hiện tác vụ zipalignDebug. Tuy nhiên, bạn có thể tự tạo tác vụ này bằng cách gọi phương thức createZipAlignTask(String taskName, File inputFile, File outputFile).
  • Tính năng ký APK hiện sử dụng Lược đồ chữ ký APK v2 bên cạnh tính năng ký JAR truyền thống. Tất cả nền tảng Android đều chấp nhận APK được tạo từ tính năng trên. Mọi thay đổi đối với những APK này sau khi ký sẽ làm mất hiệu lực chữ ký phiên bản 2 và ngăn không cho cài đặt trên thiết bị. Để vô hiệu hoá tính năng này, hãy thêm đoạn mã sau vào tệp build.gradle cấp mô-đun:

    Groovy

    android {
      ...
      signingConfigs {
        config {
          ...
          v2SigningEnabled false
        }
      }
    }
    

    Kotlin

    android {
      ...
      signingConfigs {
        create("config") {
          ...
          v2SigningEnabled = false
        }
      }
    }
    
  • Đối với các bản dựng multidex, hiện bạn có thể sử dụng quy tắc ProGuard để xác định các lớp Gradle nên tổng hợp thành tệp DEX chính của ứng dụng. Do hệ thống Android tải tệp DEX chính trước khi khởi động ứng dụng, bạn có thể ưu tiên một số lớp nhất định khi khởi động bằng cách biên dịch các tệp này thành tệp DEX chính. Sau khi bạn tạo tệp cấu hình ProGuard dành riêng cho tệp DEX chính, hãy truyền đường dẫn của tệp cấu hình đến Gradle bằng cách sử dụng buildTypes.multiDexKeepProguard. Thao tác sử dụng DSL này khác với việc sử dụng buildTypes.proguardFiles (cung cấp quy tắc ProGuard chung cho ứng dụng) và không chỉ định các lớp cho tệp DEX chính.
  • Hỗ trợ thêm tính năng cho cờ android:extractNativeLibs, giúp giảm kích thước ứng dụng khi bạn cài đặt trên thiết bị. Khi bạn thiết lập cờ này thành false trong phần tử <application> của tệp kê khai ứng dụng, các gói Gradle sẽ đóng gói các phiên bản điều chỉnh và không nén của thư viện gốc bằng APK. Thao tác này ngăn PackageManager sao chép các thư viện gốc từ APK sang hệ thống tệp của thiết bị trong quá trình cài đặt và bổ sung lợi ích rút gọn cập nhật delta ứng dụng.
  • Hiện bạn có thể chỉ định versionNameSuffix applicationIdSuffix cho phiên bản sản phẩm. (Vấn đề 59614)
Các thay đổi:
  • getDefaultProguardFile hiện trả về các tệp ProGuard mặc định Plugin của Android dành cho Gradle cung cấp và không còn dùng các tệp này trong SDK Android.
  • Cải thiện hiệu suất và các tính năng của trình biên dịch Jack:
    • Jack hiện hỗ trợ phạm vi kiểm thử của Jacoco khi thiết lập testCoverageEnabled thành true.
    • Cải thiện khả năng hỗ trợ cho trình xử lý chú giải. Trình xử lý chú giải trên classpath, chẳng hạn như bất kỳ phần phụ thuộc compile, sẽ tự động được áp dụng cho bản dựng. Bạn cũng có thể chỉ định trình xử lý chú giải trong bản dựng và truyền các đối số bằng cách sử dụng javaCompileOptions.annotationProcessorOptions {} DSL trong tệp build.gradle cấp mô-đun:

      Groovy

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className 'com.example.MyProcessor'
              // Arguments are optional.
              arguments = [ foo : 'bar' ]
            }
          }
        }
      }
      

      Kotlin

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className = "com.example.MyProcessor"
              // Arguments are optional.
              arguments(mapOf(foo to "bar"))
            }
          }
        }
      }
      

      Nếu bạn muốn áp dụng trình xử lý chú giải tại thời điểm biên dịch nhưng không đưa tính năng này vào APK, hãy sử dụng phạm vi phần phụ thuộc annotationProcessor:

      Groovy

      dependencies {
          compile 'com.google.dagger:dagger:2.0'
          annotationProcessor 'com.google.dagger:dagger-compiler:2.0'
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
      

      Kotlin

      dependencies {
          implementation("com.google.dagger:dagger:2.0")
          annotationProcessor("com.google.dagger:dagger-compiler:2.0")
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
      
    • Đối với danh sách các thông số bạn có thể thiết lập, hãy chạy lệnh sau từ dòng lệnh:

      java -jar /build-tools/jack.jar --help-properties
      
    • Theo mặc định, nếu kích thước vùng nhớ khối xếp của trình nền Gradle tối thiểu là 1.5 GB, thì giờ đây, Jack sẽ chạy theo quy trình tương tự như Gradle. Để điều chỉnh kích thước vùng nhớ khối xếp trình nền, hãy thêm nội dung sau vào tệp gradle.properties:
      # This sets the daemon heap size to 1.5GB.
      org.gradle.jvmargs=-Xmx1536M
      

2.1.0 (tháng 4 năm 2016)

2.1.3 (tháng 8 năm 2016)

Bản cập nhật này yêu cầu Gradle 2.14.1 trở lên. Gradle 2.14.1 bao gồm những điểm cải thiện hiệu suất, các tính năng mới và một bản sửa lỗi bảo mật quan trọng. Để biết thêm chi tiết, hãy xem Ghi chú phát hành Gradle.

Phần phụ thuộc:
Mới:
  • Hỗ trợ thêm tính năng Bản dùng thử cho nhà phát triển N, JDK 8 và các tính năng ngôn ngữ trong Java 8 sử dụng chuỗi công cụ Jack. Để tìm hiểu thêm, hãy đọc Hướng dẫn dùng thử N.

    Lưu ý: Tính năng Chạy tức thì hiện không hoạt động với Jack và sẽ bị vô hiệu hoá khi bạn sử dụng chuỗi công cụ mới. Bạn chỉ cần sử dụng Jack nếu đang phát triển Bản dùng thử N và muốn sử dụng các tính năng ngôn ngữ Java 8 được hỗ trợ.

  • Thêm tính năng hỗ trợ mặc định cho chức năng biên dịch Java gia tăng để giảm thời gian biên dịch trong quá trình phát triển. Công cụ này thực hiện bằng cách chỉ biên dịch lại các phần của nguồn đã thay đổi hoặc cần được biên dịch lại. Để vô hiệu hoá tính năng này, hãy bổ sung mã sau vào tệp build.gradle ở cấp mô-đun:

    Groovy

    android {
      ...
      compileOptions {
        incremental false
      }
    }
    

    Kotlin

    android {
      ...
      compileOptions {
        incremental = false
      }
    }
    
  • Hỗ trợ thêm tính năng tạo tệp dex trong quy trình xây dựng, giúp thực hiện thao tác tạo tệp dex trong quy trình trên thay vì trong các quy trình máy ảo riêng biệt bên ngoài. Tính năng này không chỉ giúp các bản dựng gia tăng hoạt động nhanh hơn mà còn tăng tốc toàn bộ các bản dựng. Tính năng tạo tệp dex trong quy trình xây dựng được bật theo mặc định đối với các dự án đã thiết lập kích thước vùng nhớ khối xếp tối đa của trình nền Gradle thành 2048 MB tối thiểu. Bạn có thể sử dụng bằng cách đưa nội dung sau vào tệp gradle.properties của dự án:

    ```none org.gradle.jvmargs = -Xmx2048m ```

    Nếu đã xác định giá trị cho javaMaxHeapSize trong tệp build.gradle ở cấp mô-đun, bạn cần thiết lập org.gradle.jvmargs thành giá trị của javaMaxHeapSize + 1024 MB. Ví dụ: nếu đã thiết lập javaMaxHeapSize là "2048m", bạn cần bổ sung đoạn mã sau vào tệp gradle.properties của dự án:

    ```none org.gradle.jvmargs = -Xmx3072m ```

    Để vô hiệu hoá tính năng tạo tệp dex trong quy trình xây dựng, hãy thêm mã sau vào tệp build.gradle cấp mô-đun:

    Groovy

    android {
      ...
      dexOptions {
          dexInProcess false
      }
    }
    

    Kotlin

    android {
      ...
      dexOptions {
          dexInProcess = false
      }
    }
    

2.0.0 (tháng 4 năm 2016)

Phần phụ thuộc:
Mới:
  • Bật tính năng Chạy tức thì bằng cách hỗ trợ tính năng chèn mã byte, đồng thời đẩy nhanh các bản cập nhật mã và tài nguyên vào ứng dụng đang chạy trên trình mô phỏng hoặc thiết bị thực tế.
  • Hỗ trợ các bản dựng gia tăng, ngay cả khi ứng dụng không chạy. Cải thiện thời gian xây dựng bằng cách đẩy những thay đổi gia tăng qua Cầu gỡ lỗi Android đến thiết bị được kết nối.
  • Bổ sung maxProcessCount để điều khiển số lượng trình chạy quy trình dex có thể được sinh ra cùng lúc. Mã sau đây trong tệp build.gradle ở cấp mô-đun thiết lập số lượng quy trình đồng thời tối đa thành 4:

    Groovy

    android {
      ...
      dexOptions {
        maxProcessCount = 4 // this is the default value
      }
    }
    

    Kotlin

    android {
      ...
      dexOptions {
        maxProcessCount = 4 // this is the default value
      }
    }
    
  • Thêm một trình rút gọn mã thử nghiệm hỗ trợ chuyển sang định dạng .dex và giảm hiện tượng lặp lại các phần phụ thuộc mà Proguard không hỗ trợ. Cách này giúp tăng tốc độ của biến thể xây dựng gỡ lỗi. Vì trình rút gọn mã thử nghiệm không hỗ trợ tính năng tối ưu hoá và làm rối mã nguồn, bạn nên bật Proguard cho các bản phát hành. Để bật trình rút gọn mã thử nghiệm cho bản dựng gỡ lỗi, hãy bổ sung mục sau vào tệp build.gradle cấp mô-đun:

    Groovy

    android {
      ...
      buildTypes {
        debug {
          minifyEnabled true
          useProguard false
        }
        release {
          minifyEnabled true
          useProguard true // this is a default setting
        }
      }
    }
    

    Kotlin

    android {
      ...
      buildTypes {
        getByName("debug") {
          minifyEnabled = true
          useProguard = false
        }
        getByName("release") {
          minifyEnabled = true
          useProguard = true // this is a default setting
        }
      }
    }
    
  • Thêm tính năng hỗ trợ ghi nhật ký và cải thiện hiệu suất cho trình thu gọn tài nguyên. Trình thu gọn tài nguyên hiện ghi lại tất cả hoạt động của tệp vào tệp resources.txt nằm trong cùng thư mục với tệp nhật ký Proguard.
Thay đổi hành vi
  • Khi bạn thiết lập minSdkVersion thành phiên bản 18 trở lên, tính năng ký APK sẽ sử dụng SHA256.
  • Khoá DSA và ECDSA hiện có thể ký gói APK.

    Lưu ý: Nhà cung cấp kho khoá Android không còn hỗ trợ khoá DSA trên Android 6.0 (API cấp 23) trở lên.

Sửa các vấn đề:
  • Sửa vấn đề gây trùng lặp các phần phụ thuộc AAR trong cả cấu hình xây dựng kiểm thử lẫn cấu hình xây dựng chính.

Các bản phát hành cũ