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 các 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 có những thay đổi và hạn chế nhằm tăng cường quyền riêng tư của người dùng, bao gồm cả những thay đổi và hạn chế sau:
- Thực thi bộ nhớ có giới hạn: Quyền truy cập vào các thư mục trong 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 một ứ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ớ đệm
Thông tin chi tiết về nội dung 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:
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 khi bật/tắt, hãy xem phần Kiểm thử và gỡ các lỗi trong ứng dụng gây ra bởi sự thay đổi về hành vi của nền tảng.
Con trỏ vùng nhớ tạm 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 đúng cách, bao gồm cả những ứng dụng sửa đổi MSB, hiện có thể gặp sự cố hoặc 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 tuỳ chỉnh từ 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 có chứa khung hiển thị tuỳ chỉnh nếu những thông báo đó đượ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 bạn vẫn có thể dùng thông báo dạng văn bản; đây là những thông báo được tạo bằng Toast.makeText()
mà không gọi setView()
.
Nếu ứng dụng của bạn vẫn cố gắng đăng một thông báo tạm thời có chứa một khung hiển thị 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 thông báo sau vào 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
Nếu muốn nhận thông báo khi một thông báo dạng 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()
. Phương thức này được thêm vào Android 11.
Các thay đổi về API thông báo dạng văn bản
Những ứng dụng nhắm đến Android 11 trở lên sẽ thấy các tác dụng phụ sau đối với thông báo dạng văn bản:
- Phương thức
getView()
trả vềnull
. - Giá trị trả về của các phương thức sau không phản ánh giá trị thực tế, vì vậy, bạn không nên dựa vào các giá trị này trong ứng dụng của mình:
- Các phương thức sau đây không có thao tác nào, vì vậy ứng dụng của bạn không nên sử dụng các phương thức này:
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
Đổ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 khi bật/tắt, hãy xem phần Kiểm thử và gỡ các lỗi trong ứng dụng gây ra bởi sự thay đổi về hành vi của nền tả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 vào cơ sở dữ liệu APN của trì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 tương tác với các công cụ TTS trong tệp kê khai
Do những thay đổi đối với chế độ hiển thị gói, những ứng dụng nhắm đến Android 11 và tương tác với một 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 của chúng:
<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
Đổ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 khi bật/tắt, hãy xem phần Kiểm thử và gỡ các lỗi trong ứng dụng gây ra bởi sự 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ể đưa ra một 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 nối AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
vào thuộc tính flags
của một đố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 dùng tệp siêu dữ liệu về 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 liên quan đến ý định về nội dung nghe nhìn yêu cầu camera mặc định của hệ thống
Kể từ Android 11, chỉ những ứng dụng camera hệ thống được cài đặt sẵn mới có thể phản hồi các thao tác theo ý định sau:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
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 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ể đặt tên gói hoặc thành phần cho ý định để làm rõ những ý định này.
Đóng gói và cài đặt ứng dụng
Tệp tài nguyên đã nén
Thông tin chi tiết về nội dung 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:
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 khi bật/tắt, hãy xem phần Kiểm thử và gỡ các lỗi trong ứng dụng gây ra bởi sự thay đổi về hành vi của nền tảng.
Bạn không thể cài đặt những ứng dụng nhắm đến Android 11 (API cấp 30) trở lên nếu chúng chứa tệp được nén resources.arsc
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ể được ánh xạ bộ nhớ phải được đọc vào một vùng đệm trong RAM, dẫn đến áp lực không cần thiết về bộ nhớ 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 đang 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ư giảm kích thước tài nguyên ứng dụng hoặc các phương thức khác để giảm kích thước, 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) và hiện chỉ được ký bằng Lược đồ chữ ký APK phiên bản 1 giờ đây 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ị vô hiệu hoá 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 đối với chế độ hiển thị gói, những ứng dụng nhắm đến Android 11 và tương tác với một 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 của chúng:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
Các thay đổi về lệnh gọi lại đối với OnSharedPreferenceChangeListener
Thông tin chi tiết về nội dung 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:
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 khi bật/tắt, hãy xem phần Kiểm thử và gỡ các lỗi trong ứng dụng gây ra bởi sự 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 (API cấp 30), bất cứ khi nào Editor.clear
được gọi, một 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 Các hạn chế đối với giao diện không phải SDK.