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 điều chỉnh ứ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 đưa ra các thay đổi và quy định 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 vị trí ở nền sau: Người dùng phải được chuyển đến phần cài đặt hệ thống để cấp quyền truy cập vị trí ở nền sau 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ần 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

Thông tin chi tiết về nội dung thay đổi

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ách sử dụ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ách bật/tắt các thay đổi, hãy xem phần Kiểm thử và gỡ lỗi trong ứng dụng liên quan đến các thay đổi về hành vi của nền tảng.

Con trỏ vùng nhớ khối xếp hiện có một 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 khi 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 allowNativeHeapPointerTagging tài liệu về tệp kê khai.

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

Thông báo ngắn tuỳ chỉnh trong nền bị chặn

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

Nếu ứng dụng của bạn cố gắng đăng thông báo ngắn chứa chế độ xem tuỳ chỉnh từ 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 đối với API thông báo ngắn dạng văn bản

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

Khả năng kết nối

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

Thông tin chi tiết về nội dung thay đổi

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ách sử dụ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ách bật/tắt các thay đổi, hãy xem phần Kiểm thử và gỡ lỗi trong ứng dụng liên quan đến các thay đổi về hành vi của nền tảng.

Ứng dụng nhắm đến Android 11 hiện cần có quyền đặc quyền Manifest.permission.WRITE_APN_SETTINGS để đọc hoặc truy cập vào cơ sở dữ liệu APN của nhà cung cấp Điện thoại. Nếu bạn cố truy cập vào cơ sở dữ liệu APN mà không có quyền này, thì một ngoại lệ bảo mật sẽ được tạo.

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 về 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 đây 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

Thông tin chi tiết về nội dung thay đổi

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ách sử dụ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ách bật/tắt các thay đổi, hãy xem phần Kiểm thử và gỡ lỗi trong ứng dụng liên quan đến các thay đổi về hành vi của nền tảng.

Kể từ Android 11, dịch vụ hỗ trợ tiếp cận của bạn không thể khai báo trong 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 của 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 về 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 bạn về 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.

Máy ảnh

Các thao tác theo ý định liên quan đến nội dung nghe nhìn cần có camera mặc định của hệ thống

Kể từ Android 11, chỉ những ứng dụng máy ảnh cài sẵn trên hệ thống 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 cài đặt trước trên hệ thống, thì 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 mình sử dụng một ứng dụng máy ảnh cụ thể của bên thứ ba để thay mặt ứng dụng đó 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 gói ứng dụng

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

Thông tin chi tiết về nội dung thay đổi

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ách sử dụ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ách bật/tắt các thay đổi, hãy xem phần Kiểm thử và gỡ lỗi trong ứng dụng liên quan đến các thay đổi về hành vi của nền tảng.

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 trên 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. 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 lên hệ thống và mức sử dụng RAM tăng đáng kể trên thiết bị.

Nếu trước đây bạn từng 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ư thu nhỏ tài nguyên ứng dụng hoặc các phương thức khác để thu nhỏ, làm rối mã nguồn và tối ưu hoá ứng dụng.

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

Những ứng dụng nhắm đến Android 11 (API cấp 30) hiện chỉ được ký bằng Giao thức chữ ký APK phiên bản 1 thì nay cũng phải được ký bằng Giao thứ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 APK Lược đồ chữ ký 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 Giao thức 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 về việc di chuyển, hãy xem bài viết Di chuyển từ Firebase JobDispatcher sang WorkManager và Di chuyển từ GCMNetworkManager sang WorkManager.

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

Do những thay đổi về 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

Thông tin chi tiết về nội dung thay đổi

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ách sử dụ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ách bật/tắt các thay đổi, hãy xem phần Kiểm thử và gỡ lỗi trong ứng dụng liên quan đến các thay đổi về hành vi của nền tảng.

Đối với các ứng dụng nhắm đến Android 11 (cấp độ API 30), bất cứ khi nào Editor.clear được gọi, lệnh gọi lại sẽ được thực hiện đế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 lập danh sách các giao diện không phải SDK bị hạn chế. Danh sách này được cập nhật thông qua việc cộng tác với nhà phát triển Android và quy trình 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 tổng quan thêm về giao diện không phải SDK, hãy xem Hạn chế đối với giao diện không phải SDK.