Thay đổi về hành vi: Ứng dụng nhắm đến Android 11

Giống như các bản phát hành trước, Android 11 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 chỉ áp dụng cho ứng dụng nhắm đến Android 11 trở lên. Nếu ứng dụng của bạn đặt targetSdkVersion thành 30, bạn nên sửa đổi ứng dụng để hỗ trợ những hành vi này cho phù hợp (nếu cần).

Ngoài ra, hãy nhớ tham khảo danh sách thay đổi về hành vi ảnh hưởng đến tất cả ứng dụng chạy trên Android 11.

Quyền riêng tư

Android 11 giới thiệu các thay đổi và hạn chế để tăng cường quyền riêng tư của người dùng, bao gồm:

  • Thực thi bộ nhớ có giới hạn: Quyền truy cập vào các thư mục bộ nhớ ngoài chỉ giới hạn ở một thư mục dành riêng cho ứng dụng và các loại nội dung nghe nhìn cụ thể mà ứng dụng tạo ra.
  • Tự động đặt lại quyền: Nếu người dùng không tương tác với ứng dụng trong vài tháng, thì hệ thống sẽ tự động đặt lại các quyền truy cập thông tin nhạy cảm của ứng dụng đó.
  • Quyền truy cập thông tin vị trí ở chế độ nền: Người dùng phải được chuyển hướng đến phần cài đặt hệ thống để cấp quyền truy cập thông tin vị trí ở chế độ nền cho ứng dụng.
  • Chế độ hiển thị gói: Khi một ứng dụng truy vấn danh sách các ứng dụng đã cài đặt trên thiết bị, danh sách trả về sẽ được lọc.

Để tìm hiểu thêm, hãy xem trang Quyền riêng tư.

Bảo mật

Gắn thẻ con trỏ vùng nhớ khối xếp

Thay đổi thông tin chi tiết

Thay đổi tên: NATIVE_HEAP_POINTER_TAGGING

Mã thay đổi: 135754954

Cách bật/tắt

Khi kiểm thử khả năng tương thích của ứng dụng với Android 11, bạn có thể bật hoặc tắt thay đổi này bằng các lệnh ADB sau:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Để biết thêm thông tin về khung tương thích và các thay đổi về việc bật/tắt, hãy xem phần Kiểm thử và gỡ lỗi các thay đổi về hành vi của nền tảng trong ứng dụng.

Con trỏ vùng nhớ khối xếp hiện có thẻ khác 0 trong byte quan trọng nhất (MSB). Các ứng dụng sử dụng con trỏ không chính xác, bao gồm cả những ứng dụng sửa đổi MSB, giờ đây có thể gặp sự cố hoặc gặp các vấn đề khác. Thay đổi này là cần thiết để hỗ trợ phần cứng trong tương lai có bật Tiện ích gắn thẻ bộ nhớ (MTE) ARM. Để tìm hiểu thêm, hãy xem bài viết Con trỏ được gắn thẻ.

Để tắt tính năng này, hãy xem tài liệu về tệp kê khai allowNativeHeapPointerTagging.

Nội dung cập nhật về thông báo ngắn

Thông báo ngắn tuỳ chỉnh từ chế độ nền bị chặn

Vì lý do bảo mật và để duy trì trải nghiệm tốt cho người dùng, hệ thống sẽ chặn các thông báo ngắn chứa thành phần hiển thị tuỳ chỉnh nếu thông báo ngắn đó được gửi từ chế độ nền bởi một ứng dụng nhắm đến Android 11 trở lên. Xin lưu ý rằng thông báo ngắn văn bản vẫn được cho phép; đây là thông báo ngắn được tạo bằng Toast.makeText() không gọi setView().

Tuy nhiên, nếu ứng dụng của bạn cố gắng đăng một thông báo ngắn chứa thành phần hiển thị tuỳ chỉnh từ chế độ nền, thì hệ thống sẽ không hiển thị thông báo đó cho người dùng. Thay vào đó, hệ thống sẽ ghi lại thông báo sau trong logcat:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

Lệnh gọi lại thông báo ngắn

Nếu bạn muốn nhận thông báo khi thông báo ngắn (văn bản hoặc tuỳ chỉnh) xuất hiện hoặc biến mất, hãy sử dụng phương thức addCallback() được thêm vào Android 11.

Thay đổi về API thông báo ngắn văn bản

Các ứng dụng nhắm đến Android 11 trở lên sẽ thấy các hiệu ứng phụ sau đây đối với thông báo ngắn văn bản:

Khả năng kết nối

Hạn chế quyền đọc cơ sở dữ liệu APN

Thay đổi thông tin chi tiết

Thay đổi tên: APN_READING_PERMISSION_CHANGE_ID

Mã thay đổi: 124107808

Cách bật/tắt

Khi kiểm thử khả năng tương thích của ứng dụng với Android 11, bạn có thể bật hoặc tắt thay đổi này bằng các lệnh ADB sau:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Để biết thêm thông tin về khung tương thích và các thay đổi về việc bật/tắt, hãy xem phần Kiểm thử và gỡ lỗi các thay đổi về hành vi của nền tảng trong ứng dụng.

Các ứng dụng nhắm đến Android 11 hiện yêu cầu quyền đặc quyền Manifest.permission.WRITE_APN_SETTINGS để đọc hoặc truy cập cơ sở dữ liệu APN của nhà cung cấp Telephony. Việc cố gắng truy cập vào cơ sở dữ liệu APN mà không có quyền này sẽ tạo ra một ngoại lệ bảo mật.

Hỗ trợ tiếp cận

Khai báo hoạt động tương tác với công cụ TTS trong tệp kê khai

Do những thay đổi đối với chế độ hiển thị gói, các ứng dụng nhắm đến Android 11 và tương tác với công cụ chuyển văn bản sang lời nói (TTS) cần thêm phần tử <queries> sau vào tệp kê khai:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Khai báo việc sử dụng nút hỗ trợ tiếp cận trong tệp siêu dữ liệu

Thay đổi thông tin chi tiết

Thay đổi tên: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Mã thay đổi: 136293963

Cách bật/tắt

Khi kiểm thử khả năng tương thích của ứng dụng với Android 11, bạn có thể bật hoặc tắt thay đổi này bằng các lệnh ADB sau:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Để biết thêm thông tin về khung tương thích và các thay đổi về việc bật/tắt, hãy xem phần Kiểm thử và gỡ lỗi các thay đổi về hành vi của nền tảng trong ứng dụng.

Kể từ Android 11, dịch vụ hỗ trợ tiếp cận của bạn không thể khai báo thời gian chạy rằng dịch vụ đó có mối liên kết với nút hỗ trợ tiếp cận của hệ thống. Nếu bạn thêm AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON vào thuộc tính flags của đối tượng AccessibilityServiceInfo, thì khung sẽ không truyền các sự kiện gọi lại nút hỗ trợ tiếp cận đến dịch vụ của bạn.

Để nhận các sự kiện gọi lại hỗ trợ tiếp cận trong dịch vụ hỗ trợ tiếp cận, hãy sử dụng tệp siêu dữ liệu của dịch vụ hỗ trợ tiếp cận để khai báo mối liên kết của dịch vụ với nút hỗ trợ tiếp cận. Đưa giá trị flagRequestAccessibilityButton vào định nghĩa của thuộc tính accessibilityFlags. Vị trí phổ biến cho tệp siêu dữ liệu của dịch vụ hỗ trợ tiếp cận là res/raw/accessibilityservice.xml.

Camera

Các thao tác theo ý định đa phương tiện yêu cầu máy ảnh mặc định của hệ thống

Kể từ Android 11, chỉ các ứng dụng máy ảnh hệ thống được cài đặt sẵn mới có thể phản hồi các hành động theo ý định sau:

Nếu có nhiều ứng dụng máy ảnh hệ thống được cài đặt sẵn, hệ thống sẽ hiển thị một hộp thoại để người dùng chọn một ứng dụng. Nếu muốn ứng dụng của bạn sử dụng một ứng dụng máy ảnh cụ thể của bên thứ ba để thay mặt chụp ảnh hoặc quay video, bạn có thể làm rõ các ý định này bằng cách đặt tên gói hoặc thành phần cho ý định.

Đóng gói và cài đặt ứng dụng

Tệp tài nguyên nén

Thay đổi thông tin chi tiết

Thay đổi tên: RESOURCES_ARSC_COMPRESSED

Mã thay đổi: 132742131

Cách bật/tắt

Khi kiểm thử khả năng tương thích của ứng dụng với Android 11, bạn có thể bật hoặc tắt thay đổi này bằng các lệnh ADB sau:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Để biết thêm thông tin về khung tương thích và các thay đổi về việc bật/tắt, hãy xem phần Kiểm thử và gỡ lỗi các thay đổi về hành vi của nền tảng trong ứng dụng.

Bạn không thể cài đặt các ứng dụng nhắm đến Android 11 (API cấp 30) trở lên nếu các ứng dụng đó chứa tệp resources.arsc đã nén hoặc nếu tệp này không được căn chỉnh theo ranh giới 4 byte. Hệ thống không thể ánh xạ bộ nhớ cho tệp này nếu có một trong hai điều kiện này. Các bảng tài nguyên không thể ánh xạ bộ nhớ phải được đọc vào vùng đệm trong RAM, dẫn đến áp lực bộ nhớ không cần thiết trên hệ thống và mức sử dụng RAM tăng lên đáng kể trên thiết bị.

Nếu trước đây bạn đã sử dụng tệp resources.arsc nén, hãy thử các chiến lược thay thế, chẳng hạn như rút gọn tài nguyên ứng dụng hoặc các phương thức khác để rút gọn, làm rối mã nguồn và tối ưu hoá ứng dụng.

Bắt buộc sử dụng Lược đồ chữ ký APK phiên bản 2

Các ứng dụng nhắm đến Android 11 (API cấp 30) hiện chỉ được ký bằng Lược đồ chữ ký APK phiên bản 1 nay cũng phải được ký bằng Lược đồ chữ ký APK phiên bản 2 trở lên. Người dùng không thể cài đặt hoặc cập nhật các ứng dụng chỉ được ký bằng Lược đồ chữ ký APK phiên bản 1 trên các thiết bị chạy Android 11.

Để xác minh rằng ứng dụng của bạn đang được ký bằng Lược đồ chữ ký APK phiên bản 2 trở lên, bạn có thể sử dụng Android Studio hoặc công cụ apksigner trên dòng lệnh.

Firebase

Firebase JobDispatcher và GCMNetworkManager

Nếu ứng dụng của bạn nhắm đến API cấp 30 trở lên, thì các lệnh gọi API Firebase JobDispatcher và GcmNetworkManager sẽ bị tắt trên các thiết bị chạy Android 6.0 (API cấp 23) trở lên. Để biết thông tin di chuyển, hãy xem bài viết Di chuyển từ Firebase JobDispatcher sang WorkManagerDi chuyển từ GCMNetworkManager sang WorkManager.

Nhận dạng lời nói

Do các thay đổi đối với chế độ hiển thị gói, các ứng dụng nhắm đến Android 11 và tương tác với dịch vụ nhận dạng lời nói cần thêm phần tử <queries> sau đây vào tệp kê khai:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

Thay đổi về lệnh gọi lại cho OnSharedPreferenceChangeListener

Thay đổi thông tin chi tiết

Thay đổi tên: CALLBACK_ON_CLEAR_CHANGE

Mã thay đổi: 119147584

Cách bật/tắt

Khi kiểm thử khả năng tương thích của ứng dụng với Android 11, bạn có thể bật hoặc tắt thay đổi này bằng các lệnh ADB sau:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Để biết thêm thông tin về khung tương thích và các thay đổi về việc bật/tắt, hãy xem phần Kiểm thử và gỡ lỗi các thay đổi về hành vi của nền tảng trong ứng dụng.

Đối với các ứng dụng nhắm đến Android 11 (API cấp 30), mỗi khi Editor.clear được gọi, hệ thống sẽ thực hiện lệnh gọi lại đến OnSharedPreferenceChangeListener.onSharedPreferenceChanged bằng khoá null.

Các hạn chế đối với giao diện không phải SDK

Android 11 cung cấp danh sách mới cập nhật về các giao diện không phải SDK bị hạn chế dựa trên khả năng cộng tác với nhà phát triển Android và kiểm thử nội bộ mới nhất. Bất cứ khi nào có thể, chúng tôi phải đảm bảo việc cung cấp các phương án thay thế công khai trước khi hạn chế giao diện không phải SDK.

Nếu ứng dụng của bạn không nhắm đến Android 11, thì một số thay đổi này có thể sẽ không ảnh hưởng ngay. Tuy nhiên, mặc dù hiện tại bạn có thể sử dụng một số giao diện không phải SDK (tuỳ thuộc vào cấp độ API mục tiêu của ứng dụng), nhưng việc sử dụng phương thức hoặc trường không phải SDK luôn có nguy cơ cao làm hỏng ứng dụng.

Nếu không chắc ứng dụng của mình có sử dụng giao diện không phải SDK hay không, bạn có thể kiểm tra ứng dụng để tìm hiểu. Nếu ứng dụng của bạn dựa vào giao diện không phải SDK, thì bạn nên bắt đầu lập kế hoạch di chuyển sang SDK làm giải pháp thay thế. Tuy nhiên, chúng tôi hiểu rằng vẫn có một số trường hợp sử dụng hợp lệ cho việc ứng dụng sử dụng giao diện không phải SDK. Nếu không tìm được giải pháp thay thế cho việc sử dụng giao diện không phải SDK cho một tính năng trong ứng dụng, thì bạn nên yêu cầu một API công khai mới.

Để tìm hiểu thêm về những thay đổi trong bản phát hành Android này, hãy xem bài viết Thông tin cập nhật đối với những hạn chế về giao diện không phải SDK trong Android 11. Để tìm hiểu thêm về giao diện không phải SDK, hãy xem bài viết Hạn chế đối với giao diện không phải SDK.