Di chuyển ứng dụng sang Android 9

Android 9 (API cấp 28) giới thiệu 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 cũng như các thay đổi mới về hành vi. 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 của bạn lên Android 9 qua hai giai đoạn chính:

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

    Xác minh rằng ứng dụng hiện tại của bạn hoạt động đầy đủ 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 phải thực hiện một số thay đổi nhỏ.

  2. Nhắm đến nền tảng mới, biên dịch bằng SDK Android 9 và xây dựng bằng các tính năng của Android 9

    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 thành 28, xác minh rằng ứng dụng vẫn tiếp tục để hoạt động như mong đợi và sau đó bắt đầu sử dụng các API mới.

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

Nếu bạn có thiết bị tương thích, hãy lấy Hình ảnh hệ thống Android 9 của nhà sản xuất dành cho thiết bị của bạn; nhấp vào đây để hình ảnh gốc cho Thiết bị Pixel. Hướng dẫn chung cho cài đặt ROM hình ảnh hệ thống tại đây.

Bạn cũng có thể tải hình ảnh hệ thống Android 9 xuống cho Trình mô phỏng Android. Tên trong danh sách Trình quản lý SDK trong Android API 28 dưới dạng Hình ảnh hệ thống Intel x86 Atom cho các API của Google.

Lưu ý: Bạn có thể tải hình ảnh hệ thống của trình mô phỏng Android 9 xuống trong Android Studio 3.1 trở lên; Android Studio 3.2 cung cấp khả năng tương thích tối đa. Để biết thêm thông tin, hãy xem phần Tải SDK Android 9.

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

Mục tiêu ở đây là đảm bảo rằng ứng dụng hiện tại của bạn hoạt động như bình thường Android 9. Do một số thay đổi của nền tảng có thể ảnh hưởng đến cách ứng dụng của bạn hoạt động, một số điều chỉnh có thể cần thiết, nhưng bạn không cần phải sử dụng các API hoặc thay đổi targetSdkVersion của bạn.

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

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

Đối với hầu hết hoạt động, hãy kiểm thử khả năng tương thích với Android 9 đòi hỏi cùng một loại thử nghiệ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 thử nghiệm hay nhất.

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

Bảng 1. Những thay đổi quan trọng ảnh hưởng đến tất cả ứng dụng chạy trên thiết bị Android 9.

Thay đổi Tóm tắt
Hạn chế đối với giao diện không phải SDK Quyền truy cập vào một số giao diện không phải SDK hiện đã bị chặn, cho dù quyền truy cập đó là trực tiếp, thông qua JNI hay thông qua cơ chế phản chiếu. Việc cố gắng truy cập giao diện bị hạn chế sẽ tạo ra lỗi như NoSuchFieldExceptionNoSuchMethodException. Hãy xem phần Hạn chế đối với giao diện không phải SDK để biết thông tin chi tiết.
Xoá nhà cung cấp Crypto Kể từ Android 9, nhà cung cấp Crypto JCA đã bị xoá. Cuộc gọi đến SecureRandom.getInstance("SHA1PRNG", "Crypto") sẽ gửi NoSuchProviderException.
Bộ giải mã UTF-8 nghiêm ngặt hơn Trong Android 9, bộ giải mã UTF-8 cho ngôn ngữ Java nghiêm ngặt hơn và tuân theo tiêu chuẩn Unicode.
Quyền truy cập vào máy ảnh, micrô và cảm biến bị chặn đối với các ứng dụng không hoạt động Khi ở trạng thái rảnh, các ứng dụng không thể truy cập vào cảm biến máy ảnh, micrô hoặc SensorManager nữa.

Để xem danh sách đầy đủ hơn về các thay đổi về hành vi cho tất cả ứng dụng chạy trên Android 9, thì hãy xem tài liệu về Thay đổi về hành vi.

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 P

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

Ngoài việc cung cấp cho bạn các API mới, Android 9 còn ra mắt một số hành vi sẽ thay đổi khi bạn cập nhật targetSdkVersion lên 28. 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 bạn thay đổi targetSdkVersion bằng cách xem xét tất cả thay đổi về hành vi đối với các ứng dụng nhắm đến Android 9.

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

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

Tải SDK Android 9

Bạn có thể lấy các gói SDK để xây dựng ứng dụng cho Android 9 bằng Android Studio 3.1 trở lên. Nếu chưa cần các tính năng mới trong Android 9 và chỉ muốn biên dịch dựa trên phiên bản nền tảng đó, bạn có thể sử dụng Android Studio 3.1. Android Studio 3.2 cung cấp hỗ trợ đầy đủ cho Các tính năng của Android 9.

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

Sau 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 thử nghiệm để đảm bảo ứng dụng hoạt động đúng cách khi nhắm đến Android 9 (API cấp 28). Đây là thời điểm thích hợp để xem lại Ứng dụng chính Nguyên tắc về chất lượngNguyên tắc tốt nhất Các phương pháp kiểm thử.

Khi bạn tạo ứng dụng với targetSdkVersion được đặt thành P, có những thay đổi cụ thể trên nền tảng mà bạn cần biết. 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àm hỏng toàn bộ ứng dụng, ngay cả khi bạn không triển khai các tính năng mới trong Android 9.

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

Bảng 2. Những thay đổi chính ảnh hưởng đến ứng dụng khi bạn đặt targetSdkVersion thành 28.

Thay đổi Tóm tắt
Quyền sử dụng dịch vụ trên nền trước Ứng dụng muốn sử dụng các dịch vụ trên nền trước hiện phải yêu cầu quyền FOREGROUND_SERVICE đầu tiên. Đây là quyền thông thường, vì vậy, hệ thống sẽ tự động cấp quyền đó cho yêu cầu . Việc bắt đầu sử dụng một dịch vụ trên nền trước khi chưa có quyền sẽ tạo ra SecurityException.
Ngừng sử dụng thuật toán mật mã Bouncy Castle Android 9 ngừng sử dụng một số thuật toán mật mã của nhà cung cấp Bouncy Castle để ưu tiên những thuật toán đó do nhà cung cấp Conscrypt cung cấp. Các lệnh gọi đến getInstance() yêu cầu nhà cung cấp Bouncy Castle sẽ tạo ra lỗi NoSuchAlgorithmException. Để giải quyết lỗi, đừng chỉ định nhà cung cấp trong getInstance() (tức là yêu cầu triển khai mặc định).
Xoá quyền truy cập trực tiếp vào Build.serial Giờ đây, các ứng dụng cần có giá trị nhận dạng Build.serial phải yêu cầu READ_PHONE_STATE rồi sử dụng phương thức Build.getSerial() mới được thêm vào Android 9.
Không cho phép chia sẻ thư mục dữ liệu WebView Các ứng dụng không thể chia sẻ một thư mục dữ liệu WebView giữa các quy trình nữa. Nếu ứng dụng của bạn có nhiều quy trình sử dụng WebView, CookieManager hoặc bất kỳ API nào khác trong gói android.webkit, thì ứng dụng sẽ gặp sự cố khi quy trình thứ hai gọi một phương thức WebView.
SELinux đã chặn quyền truy cập vào thư mục dữ liệu của ứng dụng Hệ thống thực thi hộp cát SELinux cho mỗi ứng dụng với các quy tắc hạn chế SELinux cho mỗi ứng dụng trên thư mục dữ liệu riêng tư của ứng dụng. Giờ đây, bạn không được phép truy cập trực tiếp vào thư mục dữ liệu của một ứng dụng khác theo đường dẫn. Các ứng dụng có thể tiếp tục chia sẻ dữ liệu bằng cơ chế IPC, bao gồm cả bằng cách truyền FD.

Để xem danh sách đầy đủ hơn về các thay đổi về hành vi cho ứng dụng nhắm đến Android 9, xem tài liệu về Các thay đổi về hành vi.

Để khám phá các tính năng và API mới của Android 9, hãy xem Các tính năng và API của Android 9.