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, thì 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ó).

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à 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.
  • 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 đế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ỏ của vùng nhớ khối xếp

Thông tin chi tiết về các thay đổi

Đổ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 đây:

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ề cách bật/tắt, hãy xem nội dung 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ó một thẻ khác 0 trong byte quan trọng nhất (MSB). Những ứng dụng 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 phải 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.

Cập nhật thông báo ngắn

Đã chặn các thông báo ngắn tuỳ chỉnh xuất hiện trong nề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 khung hiển thị tuỳ chỉnh nếu các thông báo ngắn đó do một ứng dụng nhắm đến Android 11 trở lên gửi từ chế độ nền. Xin lưu ý rằng hệ thống vẫn cho phép các thông báo ngắn dạng văn bản; đâ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 một thông báo ngắn chứa khung hiển thị tuỳ chỉnh ở chế độ nền, thì hệ thống sẽ không hiện 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 một 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.

Các thay đổi về API thông báo ngắn bằng văn bản

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

Khả năng kết nối

Quyền đọc bị hạn chế đối với cơ sở dữ liệu APN

Thông tin chi tiết về các thay đổi

Đổ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 đây:

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ề cách bật/tắt, hãy xem nội dung 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.

Giờ đây, các ứng dụng nhắm đến Android 11 sẽ yêu cầu quyền có đặ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. 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 trường hợp ngoại lệ về bảo mật.

Hỗ trợ tiếp cận

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

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

Thông tin chi tiết về các thay đổi

Đổ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 đây:

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ề cách bật/tắt, hãy xem nội dung 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 trong thời gian chạy rằng dịch vụ đó có 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 này 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 thuộc tính accessibilityFlags. Một 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 đối với nội dung đa phương tiện cần có máy ảnh mặc định của hệ thống

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

Nếu có nhiều ứng dụng máy ảnh được cài đặt sẵn trên hệ thống, 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 dùng một ứng dụng máy ảnh cụ thể của bên thứ ba để thay mặt ứng dụng máy ảnh hoặc video, thì bạn có thể làm rõ những ý đị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 được nén

Thông tin chi tiết về các thay đổi

Đổ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 đây:

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ề cách bật/tắt, hãy xem nội dung 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 sẽ 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 chúng chứa tệp resources.arsc được 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ớ 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 một vùng đệm trong RAM. Điều này gây ra áp lực không cần thiết đối với bộ nhớ cho hệ thống và làm tăng đáng kể mức sử dụng RAM trên thiết bị.

Nếu trước đây bạn đã dùng tệp resources.arsc được nén, hãy thử dùng 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.

Hiện 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 v1 hiện cũng phải được ký bằng Lược đồ chữ ký APK v2 trở lên. Người dùng không thể cài đặt hoặc cập nhật những ứng dụng chỉ được ký bằng Lược đồ chữ ký APK v1 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 về việc di chuyển, hãy xem phần 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 sẽ cần thêm phần tử <queries> sau vào tệp kê khai:

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

Các thay đổi về lệnh gọi lại cho OnSharedPreferencesChangeListener

Thông tin chi tiết về các thay đổi

Đổ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 đây:

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ề cách bật/tắt, hãy xem nội dung 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 ứng dụng nhắm mục tiêu Android 11 (API cấp 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 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 nói chung, hãy xem Hạn chế đối với giao diện không phải SDK.