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 sang Android 9 qua 2 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 có của bạn hoạt động với đầ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 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. 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 tiếp tục hoạt động như dự kiến, 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 ảnh hệ thống Android 9 cho thiết bị từ nhà sản xuất; nhấp vào đây để xem hình ảnh gốc cho thiết bị Pixel. Hướng dẫn chung để cài đặt ROM hình ảnh hệ thống có 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ệp này có trong Trình quản lý SDK thuộc Android API 28 dưới dạng Hình ảnh hệ thống Intel x86 Atom dành cho 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 bài viết 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 ứng dụng hiện có của bạn hoạt động như bình thường trên Android 9. 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 từng bước với Android 9

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 9 đò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 hay nhất để kiểm thử.

Tuy nhiên, có một khía cạnh khác trong việc kiểm thử: Android 9 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 9.

Thay đổi Tóm tắt
Các hạn chế đối với giao diện không phải SDK Hiện tại, quyền truy cập vào các giao diện cụ thể không phải SDK sẽ bị chặn, cho dù là truy cập trực tiếp, thông qua JNI hay qua phản chiếu. Việc cố truy cập vào các giao diện bị hạn chế sẽ tạo ra các lỗi, chẳng hạn như NoSuchFieldExceptionNoSuchMethodException. Hãy xem bài viết Các quy định 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 Tiền mã hoá Kể từ Android 9, nhà cung cấp Crypto JCA đã bị xoá. Các lệnh gọi đến SecureRandom.getInstance("SHA1PRNG", "Crypto") sẽ gửi NoSuchProviderException.
Bộ giải mã UTF-8 nghiêm ngặt hơn Trên 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 ở trạng thái rảnh Khi ở trạng thái rảnh, các ứng dụng sẽ không thể truy cập vào máy ảnh, micrô hoặc cảm biến SensorManager được nữa.

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

Cập nhật phiên bản mục tiêu của bạn 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 đưa ra một số thay đổi về hành vi khi bạn cập nhật targetSdkVersion lên phiên bản 28. Vì một số thay đổi về hành vi có thể yêu cầu thay đổi mã để tránh bị hỏng, nên trước tiên bạn cầ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 9.

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 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 mục tiêu 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 với Android 9 bằng cách sử dụ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 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 dịch vụ hỗ trợ đầy đủ cho các tính năng của Android 9.

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

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 9 (API cấp 28). Đâ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 P, 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 9.

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 28.

Thay đổi Tóm tắt
Quyền cho dịch vụ trên nền trước Giờ đây, các ứng dụng muốn dùng dịch vụ trên nền trước phải yêu cầu quyền FOREGROUND_SERVICE trước. Đây là một quyền thông thường, do đó, hệ thống sẽ tự động cấp quyền này cho ứng dụng yêu cầu. Việc khởi động một dịch vụ trên nền trước mà không có quyền sẽ gửi ra một 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, thay vào đó là 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 tạo ra lỗi NoSuchAlgorithmException. Để khắc phục lỗi, đừng chỉ định nhà cung cấp trong getInstance() (tức là yêu cầu phương thức triển khai mặc định).
Xoá quyền truy cập trực tiếp vào Build.serial Các ứng dụng cần giá trị nhận dạng Build.serial hiện phải yêu cầu quyền 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 được phép chia sẻ thư mục dữ liệu WebView Ứng dụng không thể dùng chung một thư mục dữ liệu WebView trong 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.
Quyền truy cập vào thư mục dữ liệu của ứng dụng bị SELinux chặn Hệ thống thực thi các hộp cát SELinux cho mỗi ứng dụng bằng các quy tắc hạn chế SELinux trên mỗi ứng dụng đối với thư mục dữ liệu riêng tư của từng ứng dụng. Hiện tại, 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 bằng đườ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 của ứng dụng nhắm đến Android 9, hãy xem tài liệu 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 bài viết Các tính năng và API của Android 9.