Di chuyển sang Android 8.0

Android 8.0 (API cấp 26) giới thiệu các thay đổi về hành vi, cũng như các tính năng và API mới mà bạn có thể tận dụng trong ứng dụng của mình. Tài liệu này cung cấp cho bạn thông tin tổng quan về các bước di chuyển ứng dụng sang Android 8.0 qua 2 giai đoạn chính:

  1. Đảm bảo khả năng tương thích với Android 8.0

    Xác minh rằng ứng dụng của bạn có đầy đủ chức năng trên phiên bản mới của nền tảng. Ở giai đoạn này, bạn không sử dụng các API mới hoặc thay đổi targetSdkVersion của ứng dụng, nhưng có thể cần thực hiện một số thay đổi nhỏ.

  2. Cập nhật phiên bản mục tiêu và sử dụng các tính năng của Android 8.0

    Khi bạn đã sẵn sàng tận dụng các tính năng mới của nền tảng, hãy cập nhật targetSdkVersion lên phiên bản 26, xác minh rằng ứng dụng tiếp tục hoạt động như dự kiến và sau đó bắt đầu sử dụng các API mới.

Đảm bảo khả năng tương thích với Android 8.0

Mục tiêu ở đây là đảm bảo ứng dụng hiện có của bạn hoạt động như bình thường trên Android 8.0 (API cấp 26). Vì một số thay đổi của nền tảng có thể ảnh hưởng đến cách hoạt động của ứng dụng, nên bạn có thể cần thực hiện một số điều chỉnh, nhưng bạn không cần sử dụng API mới hoặc thay đổi targetSdkVersion.

Đảm bảo khả năng tương thích với Android 8.0 theo từng bước

Chuẩn bị một thiết bị chạy Android 8.0

  • Nếu bạn có thiết bị tương thích (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P hoặc Nexus Player), hãy làm theo hướng dẫn để cài đặt ROM cho thiết bị.
  • Hoặc tải hình ảnh hệ thống Android 8.0 xuống cho Trình mô phỏng Android. Tệp này được liệt kê trong Trình quản lý SDK trong Android 8.0 dưới dạng Hình ảnh hệ thống Intel x86 Atom API của Google.

    Lưu ý: Bạn có thể tải ảnh hệ thống Android 8.0 xuống từ Android Studio 3.0 trở lên. Để biết thêm thông tin, hãy xem phần dưới đây để tải SDK Android 8.0.

Kiểm thử khả năng tương thích

Đối với hầu hết hoạt động, quy trình kiểm thử khả năng tương thích với Android 8.0 (API cấp 26) đòi hỏi cùng một loại quy trình kiểm thử mà bạn thực hiện khi chuẩn bị phát hành ứng dụng. Đây là thời điểm thích hợp để xem lại Nguyên tắc cốt lõi về chất lượng ứng dụngCác phương pháp kiểm thử hay nhất.

Tuy nhiên, có một khía cạnh khác trong việc kiểm thử: Android 8.0 giới thiệu các thay đổi đối với nền tảng Android. Những thay đổi này có thể ảnh hưởng đến hành vi của ứng dụng hoặc làm hỏng ứng dụng hoàn toàn, ngay cả khi bạn không thay đổi targetSdkVersion. Vì lý do này, bạn nên xem xét các thay đổi chính trong bảng 1 và kiểm thử mọi bản sửa lỗi mà bạn triển khai để phù hợp với các thay đổi.

Bảng 1. Các thay đổi chính ảnh hưởng đến tất cả ứng dụng chạy trên thiết bị Android 8.0.

Thay đổi Tóm tắt Tài liệu tham khảo thêm
Cập nhật quyền truy cập thông tin vị trí ở chế độ nền ít thường xuyên hơn Nếu nhận được thông tin cập nhật vị trí qua một dịch vụ nền, thì ứng dụng của bạn sẽ nhận được các bản cập nhật ít thường xuyên hơn trên Android 8.0 (API cấp 26) so với các phiên bản Android cũ. Cụ thể, dịch vụ nền không thể nhận thông tin cập nhật vị trí nhiều hơn vài lần mỗi giờ. Tuy nhiên, khi ứng dụng chạy trên nền trước, tốc độ cập nhật vị trí sẽ không thay đổi. Giới hạn quyền truy cập thông tin vị trí ở chế độ nền
net.hostname thiết bị không còn được hỗ trợ Việc truy vấn thuộc tính hệ thống net.hostname sẽ tạo ra một kết quả rỗng. Không có
Trường hợp ngoại lệ mới của send(DatagramPacket) Phương thức send(DatagramPacket) sẽ gửi một SocketException nếu phương thức connect(InetAddress, int) đã thực thi trước đó không thành công. Thay đổi về hành vi: Khả năng kết nối mạng và HTTP(S)
NullPointerException đúng từ các phương thức AbstractCollection AbstractCollection.removeAll(null)AbstractCollection.retainAll(null) hiện luôn gửi một NullPointerException; trước đây, NullPointerException không được gửi khi bộ sưu tập trống. Thay đổi này giúp hành vi phù hợp với tài liệu. Thay đổi về hành vi: Xử lý bộ sưu tập
NullPointerException phù hợp từ Currency.getDisplayName(null) Việc gọi Currency.getDisplayName(null) sẽ gửi một NullPointerException. Thay đổi về hành vi: Bản địa và quốc tế hoá

Để xem danh sách đầy đủ hơn về các thay đổi về hành vi trong Android 8.0 (API cấp 26), hãy xem thêm bài viết Các thay đổi về hành vi của Android 8.0.

Cập nhật phiên bản mục tiêu và sử dụng các tính năng của Android 8.0

Phần này giải thích cách bật tính năng hỗ trợ đầy đủ cho Android 8.0 (API cấp 26) bằng cách cập nhật targetSdkVersion lên 26 và thêm các tính năng mới có trong Android 8.0.

Ngoài việc cung cấp cho bạn các API mới, Android 8.0 còn đưa ra một số thay đổi về hành vi khi bạn cập nhật targetSdkVersion lên 26. Vì một số thay đổi về hành vi có thể yêu cầu thay đổi mã để tránh bị lỗi, trước tiên, bạn nên tìm hiểu cách ứng dụng của mình có thể bị ảnh hưởng khi thay đổi targetSdkVersion bằng cách xem lại tất cả thay đổi về hành vi đối với ứng dụng nhắm đến Android 8.0.

Lưu ý: Các bước được mô tả ở trên để đảm bảo khả năng tương thích của nền tảng là điều kiện tiên quyết để nhắm ứng dụng của bạn đến Android 8.0. Vì vậy, hãy nhớ hoàn tất các bước đó trước.

Cập nhật phiên bản mục tiêu và sử dụng các tính năng của Android 8.0 theo từng bước

Tải SDK Android 8.0

Bạn có thể lấy các gói SDK để xây dựng ứng dụng bằng Android 8.0 (API cấp 26) bằng cách sử dụng phiên bản Android Studio mới nhất (nên dùng Android Studio 3.0 trở lên). Android Studio 3.0 trở lên có các công cụ giúp bạn thực hiện các tính năng của Android 8.0 như biểu tượng thích ứngphông chữ có thể tải xuống. Nếu chưa cần các tính năng đó, bạn có thể sử dụng phiên bản Android Studio 2.3.3 ổn định để tạo ứng dụng trên Android 8.0 và sử dụng các API mới.

Để thiết lập một trong hai phiên bản Android Studio, hãy làm theo các bước sau:

  1. Chạy Android Studio rồi mở Trình quản lý SDK bằng cách nhấp vào Tools > SDK Manager (Công cụ > Trình quản lý SDK).
  2. Trong thẻ SDK Platforms (Nền tảng SDK), hãy đánh dấu vào Show Package Details (Hiện thông tin chi tiết về gói). Bên dưới Bản dùng thử Android 8.0, hãy kiểm tra những điều sau:
    • Nền tảng SDK Android 26
    • Hình ảnh hệ thống Intel x86 Atom dành cho API của Google (chỉ bắt buộc đối với trình mô phỏng)
  3. Chuyển sang thẻ SDK Tools (Bộ công cụ SDK) rồi chọn tất cả các mục có bản cập nhật (nhấp vào từng hộp đánh dấu hiển thị dấu gạch ngang ). Tệp này phải bao gồm phiên bản mới nhất của các mục bắt buộc sau:
    • Công cụ bản dựng SDK Android 26.0.0
    • Công cụ nền tảng SDK Android 26.0.0
    • Trình mô phỏng Android 26.0.0
  4. Nhấp vào OK để cài đặt tất cả gói SDK đã chọn.

Giờ đây, bạn đã sẵn sàng bắt đầu xây dựng với Android 8.0.

Cập nhật cấu hình bản dựng

Cập nhật compileSdkVersion, targetSdkVersion và phiên bản Thư viện hỗ trợ lên các bản sửa đổi mới nhất hiện có, ví dụ:

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

Xoá broadcast receiver khỏi tệp kê khai của bạn

Do Android 8.0 (API cấp 26) đưa ra các giới hạn mới cho broadcast receiver, bạn nên xoá mọi broadcast receiver đã được đăng ký cho ý định truyền tin ngầm ẩn. Việc giữ nguyên vị trí sẽ không làm hỏng ứng dụng của bạn tại thời điểm tạo bản dựng hoặc thời gian chạy, nhưng sẽ không có ảnh hưởng gì khi ứng dụng của bạn chạy trên Android 8.0.

Các thông báo truyền tin mà chỉ ứng dụng của bạn mới có thể phản hồi – ý định truyền tin rõ ràng và thông báo được gửi đến tên gói của ứng dụng cụ thể – sẽ tiếp tục hoạt động tương tự trên Android 8.0.

Có những trường hợp ngoại lệ đối với quy định hạn chế mới này. Để biết danh sách các thông báo truyền phát ngầm vẫn hoạt động trong các ứng dụng nhắm đến Android 8.0, hãy xem phần Ngoại lệ thông báo truyền phát ngầm ẩn.

Kiểm thử ứng dụng trên Android 8.0

Khi đã hoàn tất các bước chuẩn bị ở trên, bạn có thể tạo ứng dụng rồi kiểm thử thêm để đảm bảo ứng dụng hoạt động đúng cách khi nhắm đến Android 8.0 (API cấp 26). Đây là thời điểm thích hợp khác để xem lại Nguyên tắc cốt lõi về chất lượng ứng dụngCác phương pháp hay nhất để kiểm thử.

Khi xây dựng ứng dụng với targetSdkVersion được đặt thành 26, bạn cần lưu ý một số thay đổi cụ thể trên nền tảng. Một số thay đổi này có thể ảnh hưởng đáng kể đến hành vi của ứng dụng hoặc thậm chí là làm hỏng ứng dụng hoàn toàn, ngay cả khi bạn không triển khai các tính năng mới trong Android 8.0.

Bảng 2 cung cấp danh sách những thay đổi này cùng với đường liên kết đến thông tin chi tiết.

Bảng 2. Các thay đổi chính ảnh hưởng đến ứng dụng khi targetSdkVersion được đặt thành 26.

Thay đổi Tóm tắt Tài liệu tham khảo thêm
Quyền riêng tư Android 8.0 (API cấp 26) không hỗ trợ việc sử dụng các thuộc tính hệ thống net.dns1, net.dns2, net.dns3, hoặc net.dns4. Thay đổi về hành vi: Quyền riêng tư
Đã thực thi phân đoạn có thể ghi và có thể thực thi Đối với các thư viện gốc, Android 8.0 (API cấp 26) thực thi quy tắc về việc dữ liệu không được thực thi và mã không được ghi. Thay đổi về hành vi: Thư viện gốc
Xác thực phần và tiêu đề ELF Trình liên kết động sẽ kiểm tra nhiều giá trị hơn trong tiêu đề và mục ELF và sẽ gặp lỗi nếu các giá trị đó không hợp lệ. Thay đổi về hành vi: Thư viện gốc
Thông báo Các ứng dụng nhắm đến phiên bản SDK Android 8.0 (API cấp 26) phải triển khai một hoặc nhiều kênh thông báo để đăng thông báo cho người dùng. Tổng quan về API: Thông báo
Phương thức List.sort() Quá trình triển khai phương thức này có thể không gọi được Collections.sort() nữa hoặc ứng dụng sẽ gửi một ngoại lệ do tràn ngăn xếp. Thay đổi về hành vi: Xử lý bộ sưu tập
Phương thức Collections.sort() Trong quá trình triển khai Danh sách, Collections.sort() hiện sẽ gửi một ConcurrentModificationException. Thay đổi về hành vi: Xử lý bộ sưu tập

Để xem danh sách đầy đủ hơn về các thay đổi về hành vi trong Android 8.0 (API cấp 26), hãy xem nội dung Các thay đổi về hành vi của Android 8.0.

Để khám phá các tính năng và API mới có trên Android 8.0 (API cấp 26), hãy xem Các tính năng và API của Android 8.0.