Thay đổi về hành vi: tất cả ứng dụng

Nền tảng Android 17 có các thay đổi về hành vi có thể ảnh hưởng đến ứng dụng của bạn. Những thay đổi về hành vi sau đây áp dụng cho tất cả ứng dụng khi chạy trên Android 17, bất kể targetSdkVersion. Bạn nên kiểm thử ứng dụng rồi sửa đổi để hỗ trợ những thay đổi này cho phù hợp (nếu cần).

Ngoài ra, hãy nhớ tham khảo danh sách các thay đổi về hành vi chỉ ảnh hưởng đến những ứng dụng nhắm đến Android 17.

Bảo mật

Android 17 có những điểm cải tiến sau đây về tính bảo mật của thiết bị và ứng dụng.

Kế hoạch ngừng sử dụng usesClearTraffic

Trong một bản phát hành trong tương lai, chúng tôi dự định sẽ ngừng sử dụng phần tử usesCleartextTraffic. Những ứng dụng cần tạo kết nối không mã hoá (HTTP) nên di chuyển sang sử dụng tệp cấu hình bảo mật mạng. Tệp này cho phép bạn chỉ định những miền mà ứng dụng cần tạo kết nối văn bản thô.

Xin lưu ý rằng các tệp cấu hình bảo mật mạng chỉ được hỗ trợ trên API cấp 24 trở lên. Nếu ứng dụng của bạn có cấp độ API tối thiểu thấp hơn 24, bạn nên thực hiện cả hai việc sau:

  • Đặt thuộc tính usesCleartextTraffic thành true
  • Sử dụng tệp cấu hình mạng

Nếu cấp độ API tối thiểu của ứng dụng là 24 trở lên, bạn có thể sử dụng tệp cấu hình mạng và không cần đặt usesCleartextTraffic.

Hạn chế các quyền ngầm định đối với URI

Hiện tại, nếu một ứng dụng chạy một ý định có URI với thao tác Send, SendMultiple hoặc ImageCapture, thì hệ thống sẽ tự động cấp quyền đọc và ghi URI cho ứng dụng đích. Chúng tôi dự định thay đổi hành vi này trong Android 18. Vì lý do này, bạn nên cấp quyền URI một cách rõ ràng cho các ứng dụng có liên quan thay vì dựa vào hệ thống để cấp quyền.

Hạn mức kho khoá cho mỗi ứng dụng

Các ứng dụng không nên tạo quá nhiều khoá trong Kho khoá Android, vì đây là một tài nguyên dùng chung cho tất cả ứng dụng trên thiết bị. Kể từ Android 17, hệ thống sẽ áp dụng giới hạn về số lượng khoá mà một ứng dụng có thể sở hữu. Giới hạn là 50.000 khoá đối với các ứng dụng không phải là ứng dụng hệ thống nhắm đến Android 17 (cấp độ API 37) trở lên và 200.000 khoá đối với tất cả các ứng dụng khác. Các ứng dụng hệ thống có giới hạn là 200.000 khoá, bất kể chúng nhắm đến cấp độ API nào.

Nếu một ứng dụng cố gắng tạo các khoá vượt quá hạn mức, thì quá trình tạo sẽ không thành công với KeyStoreException. Chuỗi thông báo của ngoại lệ chứa thông tin về giới hạn khoá. Nếu ứng dụng gọi getNumericErrorCode() trên ngoại lệ, thì giá trị trả về sẽ phụ thuộc vào cấp độ API mà ứng dụng nhắm đến:

  • Ứng dụng nhắm đến Android 17 (API cấp 37) trở lên: getNumericErrorCode() sẽ trả về giá trị ERROR_TOO_MANY_KEYS mới.
  • Tất cả các ứng dụng khác: getNumericErrorCode() trả về ERROR_INCORRECT_USAGE.

Trải nghiệm người dùng và giao diện người dùng hệ thống

Android 17 có những thay đổi sau đây nhằm mang lại trải nghiệm nhất quán và trực quan hơn cho người dùng.

Khôi phục chế độ hiển thị IME mặc định sau khi xoay

Kể từ Android 17, khi cấu hình của thiết bị thay đổi (ví dụ: thông qua thao tác xoay) và ứng dụng không tự xử lý việc này, thì chế độ hiển thị IME trước đó sẽ không được khôi phục.

Nếu ứng dụng của bạn trải qua một thay đổi về cấu hình mà ứng dụng không xử lý và ứng dụng cần bàn phím hiển thị sau khi thay đổi, thì bạn phải yêu cầu rõ ràng điều này. Bạn có thể gửi yêu cầu này theo một trong những cách sau:

  • Đặt thuộc tính android:windowSoftInputMode thành stateAlwaysVisible.
  • Yêu cầu bàn phím ảo theo phương thức lập trình trong phương thức onCreate() của hoạt động hoặc thêm phương thức onConfigurationChanged().

Hoạt động đầu vào của người dùng

Android 17 có những thay đổi sau đây ảnh hưởng đến cách ứng dụng tương tác với các thiết bị đầu vào của con người, chẳng hạn như bàn phím và bàn di chuột.

Theo mặc định, bàn di chuột sẽ gửi các sự kiện tương đối trong quá trình ghi lại con trỏ

Kể từ Android 17, nếu một ứng dụng yêu cầu tính năng nắm bắt con trỏ bằng View.requestPointerCapture() và người dùng sử dụng bàn di chuột, thì hệ thống sẽ nhận ra chuyển động của con trỏ và cử chỉ cuộn từ thao tác chạm của người dùng, đồng thời báo cáo các cử chỉ đó cho ứng dụng theo cách tương tự như chuyển động của con trỏ và bánh xe cuộn từ chuột đã nắm bắt. Trong hầu hết các trường hợp, điều này giúp các ứng dụng hỗ trợ chuột đã nắm bắt không cần thêm logic xử lý đặc biệt cho bàn di chuột. Để biết thêm thông tin chi tiết, hãy xem tài liệu về View.POINTER_CAPTURE_MODE_RELATIVE.

Trước đây, hệ thống không cố gắng nhận ra cử chỉ từ bàn di chuột, mà thay vào đó, cung cấp vị trí ngón tay tuyệt đối, thô cho ứng dụng ở định dạng tương tự như thao tác chạm trên màn hình cảm ứng. Nếu một ứng dụng vẫn yêu cầu dữ liệu tuyệt đối này, thì ứng dụng đó nên gọi phương thức mới bằng thay vì.View.requestPointerCapture(int)View.POINTER_CAPTURE_MODE_ABSOLUTE

Nội dung nghe nhìn

Android 17 có những thay đổi sau đây về hành vi của nội dung nghe nhìn.

Tăng cường bảo mật âm thanh ở chế độ nền

Kể từ Android 17, khung âm thanh sẽ thực thi các quy tắc hạn chế đối với hoạt động tương tác âm thanh ở chế độ nền, bao gồm cả việc phát âm thanh, yêu cầu lấy tiêu điểm âm thanh và API thay đổi âm lượng để đảm bảo người dùng chủ ý bắt đầu những thay đổi này.

Nếu ứng dụng cố gắng gọi các API âm thanh khi ứng dụng không ở trong một vòng đời hợp lệ, thì các API phát âm thanh và thay đổi âm lượng sẽ âm thầm không hoạt động mà không đưa ra một ngoại lệ hoặc cung cấp thông báo lỗi. API lấy tiêu điểm âm thanh không thành công với mã kết quả AUDIOFOCUS_REQUEST_FAILED.

Để biết thêm thông tin, bao gồm cả các chiến lược giảm thiểu, hãy xem phần Tăng cường bảo mật cho âm thanh nền.

Khả năng kết nối

Android 17 có những thay đổi sau đây để tăng cường khả năng kết nối của thiết bị.

Tự động ghép nối lại khi mất liên kết Bluetooth

Android 17 giới thiệu tính năng tự động ghép nối lại, một tính năng nâng cao ở cấp hệ thống được thiết kế để tự động giải quyết tình trạng mất kết nối Bluetooth.

Trước đây, nếu mất kết nối, người dùng phải tự chuyển đến phần Cài đặt để huỷ ghép nối rồi ghép nối lại thiết bị ngoại vi. Tính năng này dựa trên tính năng cải thiện bảo mật của Android 16 bằng cách cho phép hệ thống thiết lập lại kết nối trong nền mà không yêu cầu người dùng tự chuyển đến phần Cài đặt để hủy ghép nối và ghép nối lại thiết bị ngoại vi.

Mặc dù hầu hết các ứng dụng sẽ không yêu cầu thay đổi mã, nhưng nhà phát triển nên lưu ý đến những thay đổi về hành vi sau đây trong ngăn xếp Bluetooth:

  • Bối cảnh ghép nối mới: ACTION_PAIRING_REQUEST hiện bao gồm phần bổ sung EXTRA_PAIRING_CONTEXT, cho phép ứng dụng phân biệt giữa yêu cầu ghép nối tiêu chuẩn và nỗ lực tự động ghép nối lại do hệ thống khởi tạo.
  • Cập nhật khoá có điều kiện: Các khoá bảo mật hiện có sẽ chỉ được thay thế nếu quá trình ghép nối lại thành công và kết nối mới đáp ứng hoặc vượt quá mức bảo mật của kết nối trước đó.
  • Thời gian ý định đã sửa đổi: Ý định ACTION_KEY_MISSING hiện chỉ được truyền đi nếu nỗ lực tự động ghép nối lại không thành công. Điều này giúp giảm việc xử lý lỗi không cần thiết trong ứng dụng nếu hệ thống khôi phục thành công kết nối trong nền.
  • Thông báo cho người dùng: Hệ thống quản lý việc ghép nối lại thông qua các thông báo và hộp thoại mới trên giao diện người dùng. Người dùng sẽ được nhắc xác nhận nỗ lực ghép nối lại để đảm bảo họ biết về việc kết nối lại.

Nhà sản xuất thiết bị ngoại vi và nhà phát triển ứng dụng đồng hành nên xác minh rằng phần cứng và ứng dụng xử lý các quá trình chuyển đổi kết nối một cách suôn sẻ. Để kiểm thử hành vi này, hãy mô phỏng tình trạng mất kết nối từ xa bằng một trong các phương thức sau:

  • Xoá thông tin kết nối theo cách thủ công khỏi thiết bị ngoại vi
  • Huỷ ghép nối thiết bị theo cách thủ công trong phần: Cài đặt > Thiết bị đã kết nối