Thay đổi khung tương thích (AndroidAndroid 12)

Hình 1. Màn hình Thay đổi về khả năng tương thích của ứng dụng trong Tuỳ chọn cho nhà phát triển liệt kê các thay đổi mà bạn bật/tắt được.

Trang này mô tả từng thay đổi về hành vi là một phần của khung tương thích trong Android 12 (API cấp 31). Hãy sử dụng danh sách này cùng với tuỳ chọn cho nhà phát triển và lệnh ADB để kiểm thử và gỡ lỗi ứng dụng khi bạn chuẩn bị hỗ trợ và nhắm mục tiêu Android 12.

Bạn có thể sử dụng các công cụ trong khung tương thích để làm một số việc sau đây:

  • Kiểm thử các thay đổi được nhắm mục tiêu mà không thực sự thay đổi targetSdkVersion của ứng dụng. Bạn có thể sử dụng nút bật/tắt để buộc bật những thay đổi cụ thể về hành vi được nhắm đến nhằm đánh giá tác động đối với ứng dụng hiện tại.
  • Chỉ tập trung kiểm thử những thay đổi cụ thể. Thay vì phải cùng lúc giải quyết mọi thay đổi được nhắm đến, nút bật/tắt cho phép bạn chỉ bật những thay đổi mà mình muốn kiểm thử.
  • Quản lý nút bật/tắt thông qua adb. Bạn có thể sử dụng các lệnh adb để bật và tắt các thay đổi bật/tắt được trong môi trường kiểm thử tự động.
  • Sử dụng mã nhận dạng thay đổi tiêu chuẩn để gỡ lỗi nhanh hơn. Các thay đổi bật/tắt được sẽ có một mã nhận dạng và tên duy nhất mà bạn có thể dùng để gỡ lỗi nhanh nguyên nhân gốc trong dữ liệu đầu ra của nhật ký.

Để biết toàn bộ thông tin chi tiết về cách sử dụng các công cụ đối với từng trường hợp sử dụng này, hãy xem bài viết Các công cụ khung tương thích.

Các thay đổi về hành vi được đưa vào khung tương thích

Danh sách trong phần này mô tả từng thay đổi về hành vi có trong khung tương thích trong Android 12.

Bạn có thể lọc danh sách các thay đổi theo Trạng thái mặc định.

Đã thêm các thay đổi về hành vi vào khung tương thích trong Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

Mã thay đổi: 185004937
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Khi bật, sẽ áp dụng hộp cát API Hiển thị cho một gói bất kể chế độ cửa sổ. API Hiển thị sẽ luôn cung cấp các giới hạn đối với ứng dụng.

Để tìm hiểu thêm về thay đổi này, hãy xem phần về Các phương thức Hiển thị đã ngừng hoạt động tại trang Các thay đổi trong hành vi của Android 12.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Mã thay đổi: 163400105
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 32) trở lên.

Kể từ Android 12, nền tảng này có thể đưa ra các đề xuất không phải văn bản (chẳng hạn như hình ảnh) bằng khung tự động điền tăng cường (xem dịch vụ tự động điền). Để một ứng dụng có thể xử lý các đề xuất này, thông thường, ứng dụng đó phải triển khai API OnReceiveContentListener.

Để việc sử dụng API này được suôn sẻ hơn đối với các ứng dụng trước đây đã triển khai API InputConnection.commitContent(InputContentInfo, int, Bundle), chúng tôi sẽ sử dụng lại API đó làm phương án dự phòng nếu ứng dụng chưa triển khai OnReceiveContentListener. Tính năng dự phòng này chỉ được bật trên Android 12 (API cấp 31). Mã thay đổi này sẽ vô hiệu hoá tính năng dự phòng, do đó, các ứng dụng nhắm đến Android 12 (API cấp 32) trở lên phải triển khai API OnReceiveContentListener để chấp nhận nội dung đề xuất không phải văn bản.

BLOCK_FLAG_SLIPPERY

Mã thay đổi: 157929241
Trạng thái mặc định: Bật đối với tất cả ứng dụng.

Đối với các ứng dụng chạy trên Android 12 (API cấp 31), hãy kiểm tra xem FLAG_SLIPPERY có đang được dùng với bất kỳ cửa sổ nào trong ứng dụng hay không. Chúng tôi dự kiến rằng có thể cờ này chỉ được các thành phần hệ thống sử dụng vì đây là trường không được hỗ trợ. Nếu vậy, video đó sẽ bị hạn chế.

BLOCK_GPS_STATUS_USAGE

Mã thay đổi: 144027538
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, bạn phải thay thế tất cả cách sử dụng API GpsStatus bằng API GnssStatus.

BLOCK_IMMUTABLE_PENDING_INTENTS

Mã thay đổi: 171317480
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, các đối tượng PendingIntent không thể thay đổi được truyền vào API vị trí sẽ tạo ra một IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Mã thay đổi: 169887240
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, bạn không thể dùng API hệ thống LocationRequest với các yêu cầu truy cập thông tin vị trí PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

Mã thay đổi: 158002302
Trạng thái mặc định: Bật đối với tất cả ứng dụng.

Để duy trì tính bảo mật của hệ thống và mang đến trải nghiệm tốt cho người dùng, Android 12 ngăn các ứng dụng sử dụng sự kiện chạm, trong đó lớp phủ sẽ chặn ứng dụng theo cách không an toàn.

Để tìm hiểu thêm về thay đổi này, hãy xem bài viết Đã chặn các sự kiện chạm không đáng tin cậy.

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Mã thay đổi: 78294732
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 32) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 32) trở lên, hãy sửa vòng đời của kết quả hoạt động để đảm bảo rằng một hoạt động nhận được kết quả hoạt động ngay trước khi tiếp tục.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Mã thay đổi: 162547999
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Cho biết rằng thiết bị này có hỗ trợ các chỉ báo máy ảnh và micrô. Sẽ là false nếu có Mã thay đổi, vì phương thức CompatChanges#isChangeEnabled sẽ trả về true nếu không có Mã thay đổi.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Mã thay đổi: 146211400
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 32) trở lên.

Đối với các ứng dụng nhắm mục tiêu Android 12 (API cấp 32) trở lên, trình quản lý gói sẽ không cài đặt một gói nếu có các nhóm quyền không đúng định dạng. Bạn chỉ nên chia sẻ nhóm quyền giữa các ứng dụng dùng chung một chứng chỉ. Nếu một quyền thuộc về một nhóm, nhóm đó cũng phải được xác định.

CHANGE_ID_AUTH_STATE_DENIED

Mã thay đổi: 181350407
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng khách nhắm đến Android 12 (API cấp 31) trở lên, hệ thống sẽ gửi SecurityException khi các ứng dụng đó ở trạng thái uỷ quyền bị từ chối và cố gắng gửi thông báo đến một ứng dụng nano.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Mã thay đổi: 136069189
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, SecurityException sẽ được gửi khi không có quyền HIGH_SAMPLING_RATE_SENSORS, chạy ở chế độ gỡ lỗi và yêu cầu tốc độ lấy mẫu nhanh hơn 200 Hz.

DELIVER_HISTORICAL_LOCATIONS

Mã thay đổi: 73144566
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, ứng dụng vị trí có thể nhận được thông tin vị trí trước đây (từ trước thời điểm hiện tại) trong một số trường hợp.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Mã thay đổi: 181658987
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, cung cấp khả năng tương thích ngược cho các thay đổi trong TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

Mã thay đổi: 170503758
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm mục tiêu đến Android 12 (API cấp 31) trở lên, nền tảng có thể điều tiết tốc độ khung hình của ứng dụng xuống số chia của tốc độ làm mới nếu thích hợp hơn (ví dụ: nếu ứng dụng được gọi đến Surface.setFrameRate(float, int)). Ứng dụng sẽ gặp phải lệnh gọi lại Choreographer.postFrameCallback(Choreographer.FrameCallback) và áp lực ngược ở tốc độ khung hình được điều tiết. Các ứng dụng dùng Display.getRefreshRate()Display.Mode.getRefreshRate() để biết tốc độ làm mới màn hình là bao nhiêu. Display.getRefreshRate() sẽ luôn trả về tốc độ khung hình của ứng dụng chứ không phải tốc độ làm mới màn hình thực tế để cho phép các ứng dụng thực hiện đúng tốc độ khung hình. Display.Mode.getRefreshRate() sẽ trả về tốc độ khung hình của ứng dụng nếu được biên dịch cho bản phát hành trước và kể từ Android 12 (API cấp 31), thì kết quả sẽ trả về tốc độ làm mới màn hình thực tế.

DOWNSCALED

Mã thay đổi: 168419799
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Thay đổi này là yếu tố thúc đẩy tất cả thay đổi về việc giảm quy mô vùng đệm cho mỗi ứng dụng. Khi bật thay đổi này, bạn có thể áp dụng các hệ số tỷ lệ sau:

Khi thay đổi này được bật đối với một gói ứng dụng, ứng dụng sẽ bị buộc đổi kích thước thành hệ số tỷ lệ cao nhất được bật. Ví dụ: tỷ lệ 80% sẽ được sử dụng nếu bật cả tỷ lệ 80% và 70% (DOWNSCALE_80DOWNSCALE_70).

DOWNSCALE_30

Mã thay đổi: 189970040
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 30%.

DOWNSCALE_35

Mã thay đổi: 189969749
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 35%.

DOWNSCALE_40

Mã thay đổi: 189970038
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 40%.

DOWNSCALE_45

Mã thay đổi: 189969782
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 45%.

DOWNSCALE_50

Mã thay đổi: 176926741
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 50%.

DOWNSCALE_55

Mã thay đổi: 189970036
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 55%.

DOWNSCALE_60

Mã thay đổi: 176926771
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 60%.

DOWNSCALE_65

Mã thay đổi: 189969744
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 65%.

DOWNSCALE_70

Mã thay đổi: 176926829
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 70%.

DOWNSCALE_75

Mã thay đổi: 189969779
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 75%.

DOWNSCALE_80

Mã thay đổi: 176926753
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 80%.

DOWNSCALE_85

Mã thay đổi: 189969734
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 85%.

DOWNSCALE_90

Mã thay đổi: 182811243
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu DOWNSCALED được bật cùng, việc bật thay đổi này cho một gói sẽ buộc ứng dụng giả định rằng nó đang chạy trên màn hình có tỷ lệ độ phân giải thực theo chiều dọc và chiều ngang là 90%.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

Mã thay đổi: 157629738
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Các ứng dụng Android TV nhắm đến Android 12 (API cấp 31) trở lên dự kiến sẽ xử lý được mọi kích thước Cửa sổ, bao gồm cả kích thước Cửa sổ lớn hơn 1080p. Các ứng dụng nhắm mục tiêu các phiên bản Android cũ hơn không mong muốn nhận được Windows lớn hơn 1080p, vì vậy, Windows của các ứng dụng đó sẽ giảm xuống còn 1080p khi cần thiết.

DROP_CLOSE_SYSTEM_DIALOGS

Mã thay đổi: 174664120
Trạng thái mặc định: Bật đối với tất cả ứng dụng.

Để cải thiện quyền kiểm soát của người dùng khi tương tác với ứng dụng và hệ thống, kể từ Android 12, thao tác theo ý định ACTION_CLOSE_SYSTEM_DIALOGS sẽ không được dùng nữa.

Để tìm hiểu thêm về thay đổi này, hãy xem bài viết Ứng dụng không thể đóng hộp thoại hệ thống.

ENABLE_CHECKS_FOR_PRIVATE_FILES

Mã thay đổi: 172100307
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Các ứng dụng nhắm đến Android 12 (API cấp 31) trở lên không thể chèn hoặc cập nhật tệp riêng tư bằng nhà cung cấp nội dung nghe nhìn.

ENABLE_DEFERRED_SCAN

Mã thay đổi: 180326732
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Bật tuỳ chọn này để trì hoãn quá trình quét được kích hoạt như một phần của MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Mã thay đổi: 157233955
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, hãy bật biện pháp bảo vệ READ_PHONE_STATE khi truy vấn API và thông báo trạng thái lệnh gọi, chẳng hạn như TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription()TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Mã thay đổi: 183407956
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, hãy bật biện pháp bảo vệ READ_PHONE_NUMBERS hoặc READ_PRIVILEGED_PHONE_STATE trên getPhoneAccount(PhoneAccountHandle).

ENABLE_INCLUDE_ALL_VOLUMES

Mã thay đổi: 182734110
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Bật tuỳ chọn này để đưa các hàng cơ sở dữ liệu của tệp vào một ổ đĩa mới bị tháo gần đây trong MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Mã thay đổi: 178209446
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Bật tuỳ chọn này để cho phép các ứng dụng có quyền Manifest.permission.MANAGE_EXTERNAL_STORAGE yêu cầu quyền truy cập vào bộ nhớ ngoài thô.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Mã thay đổi: 185199076
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, tất cả chuông báo không chính xác đều bắt buộc phải có kích thước cửa sổ tối thiểu, dự kiến sẽ nằm trong khoảng vài phút. Trên thực tế, mọi chuông báo yêu cầu cửa sổ nhỏ hơn cũng giống như chuông báo chính xác và nên sử dụng các API tương ứng được cung cấp, chẳng hạn như setExact(int, long, PendingIntent). Chuông báo không chính xác có cửa sổ ngắn hơn được chỉ định sẽ có cửa sổ được hệ thống kéo dài.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Mã thay đổi: 142191088
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Các ứng dụng nhắm đến Android 12 (API cấp 31) trở lên cần khai báo các phần phụ thuộc cho thư viện gốc dùng chung công khai do nhà sản xuất thiết bị xác định bằng thẻ uses-native-library trong AndroidManifest.xml. Nếu bất kỳ phần phụ thuộc nào không được đáp ứng (ví dụ: một trong các phần phụ thuộc không tồn tại) thì trình quản lý gói sẽ không cài đặt ứng dụng. Bạn có thể chỉ định phần phụ thuộc là không bắt buộc bằng cách sử dụng thuộc tính android:required trong thẻ. Trong trường hợp không đáp ứng phần phụ thuộc, quá trình cài đặt sẽ không dừng lại.

Sau khi cài đặt, ứng dụng chỉ được cung cấp cùng với các thư viện dùng chung gốc được chỉ định trong tệp kê khai ứng dụng. Việc gọi dlopen trên một thư viện dùng chung gốc không xuất hiện trong tệp kê khai ứng dụng sẽ không thực hiện được ngay cả khi thư viện đó thực sự tồn tại trên thiết bị.

ENFORCE_STRICT_QUERY_BUILDER

Mã thay đổi: 143231523
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Khi được bật, SQLiteQueryBuilder sẽ xác minh đối số độc hại trên tất cả lựa chọn truy vấn CalendarProvider2.

FGS_BG_START_RESTRICTION_CHANGE_ID

Mã thay đổi: 170668199
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, hãy hạn chế thời điểm ứng dụng có thể bắt đầu dịch vụ trên nền trước trong khi chạy ở chế độ nền.

FGS_START_EXCEPTION_CHANGE_ID

Mã thay đổi: 174041399
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, cho phép hệ thống gửi một IllegalStateException nếu một ứng dụng cố khởi động một dịch vụ trên nền trước trong khi đang chạy ở chế độ nền.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Mã thay đổi: 156215187
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, hãy hoàn tất InputConnection khi thiết bị trở thành non-interactive.

Nếu được input method hiện tại bật, kết nối đầu vào hiện tại sẽ là finished bất cứ khi nào các thiết bị không tương tác.

Nếu bạn không bật chính sách này, thì hệ thống sẽ tự động vô hiệu hoá kết nối đầu vào hiện tại khi các thiết bị không tương tác, đồng thời cặp onFinishInput()onStartInput() sẽ được gửi đi khi thiết bị có khả năng tương tác trở lại.

FORCE_DISABLE_HEVC_SUPPORT

Mã thay đổi: 174227820
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Buộc tắt chế độ hỗ trợ tính năng đa phương tiện HEVC trên một ứng dụng. Ứng dụng nên khai báo các tính năng đa phương tiện được hỗ trợ trong tệp kê khai, nhưng cờ này có thể được dùng để buộc ứng dụng không hỗ trợ HEVC, do đó, buộc chuyển mã khi truy cập nội dung đa phương tiện được mã hoá theo HEVC. Việc thiết lập cờ này sẽ ghi đè mọi chế độ mặc định cấp hệ điều hành đối với ứng dụng. Trạng thái mặc định là tắt, có nghĩa là chế độ mặc định của hệ điều hành sẽ được ưu tiên. Nếu cả cờ này và FORCE_ENABLE_HEVC_SUPPORT đều được bật, thì hệ điều hành sẽ bỏ qua cả hai cờ.

FORCE_ENABLE_HEVC_SUPPORT

Mã thay đổi: 174228127
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Buộc bật một ứng dụng để hỗ trợ tính năng đa phương tiện HEVC. Các ứng dụng nên khai báo các tính năng đa phương tiện được hỗ trợ trong tệp kê khai. Tuy nhiên, cờ này có thể dùng để buộc một ứng dụng hỗ trợ HEVC, do đó, tránh chuyển mã khi truy cập vào nội dung đa phương tiện được mã hoá theo HEVC. Việc thiết lập cờ này sẽ ghi đè mọi chế độ mặc định cấp hệ điều hành đối với ứng dụng. Trạng thái mặc định là tắt, có nghĩa là chế độ mặc định của hệ điều hành sẽ được ưu tiên. Nếu cả cờ này và FORCE_DISABLE_HEVC_SUPPORT đều được bật, thì hệ điều hành sẽ bỏ qua cả hai cờ.

FORCE_NON_RESIZE_APP

Mã thay đổi: 181136395
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Buộc các gói được áp dụng không được thay đổi kích thước.

FORCE_RESIZE_APP

Mã thay đổi: 174042936
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Buộc các gói được áp dụng phải có thể đổi kích thước. Chúng tôi chỉ cho phép đổi kích thước ở chế độ cửa sổ toàn màn hình, nhưng không buộc ứng dụng phải đổi kích thước ở chế độ nhiều cửa sổ có thể đổi kích thước.

HIDE_PROP_ICUBINARY_DATA_PATH

Mã thay đổi: 171979766
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, hãy xoá quyền truy cập vào thuộc tính android.icu.impl.ICUBinary.dataPath.

IGNORE_ALLOW_BACKUP_IN_D2D

Mã thay đổi: 183147249
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, trong quá trình di chuyển từ thiết bị này sang thiết bị khác (D2D), android:allowBackup sẽ bị bỏ qua.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Mã thay đổi: 180523564
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, việc bao gồm và loại trừ các quy tắc được chỉ định bằng android:fullBackupContent sẽ bị bỏ qua trong quá trình chuyển từ thiết bị này sang thiết bị khác (D2D).

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

Mã thay đổi: 169273070
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, getSupportedLocales() hiện trả về danh sách ngôn ngữ trống khi không được thiết lập, thay vì ngôn ngữ hệ thống mặc định.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Mã thay đổi: 158482162
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, quyền BACKUP cần thiết cho isBackupServiceActive() được thực thi ở phía dịch vụ thay vì phía máy khách trong BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Mã thay đổi: 169897160
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Khi được bật, quá trình tạo hoạt động kho khoá có thể không thành công theo chiến lược cắt giảm mới. Trước đây, kho khoá hoạt động theo giả định rằng việc tạo hoạt động mã hoá luôn thành công. Tuy nhiên, phần phụ trợ KeyMint chỉ có số chỗ giới hạn dành cho hoạt động.

Để duy trì số lượng các thao tác "vô hạn", trình nền Kho khoá sẽ cắt giảm các thao tác được sử dụng gần đây nhất nếu không có sẵn chỗ cho thao tác đó. Do đó, các hoạt động tốt có thể bị chấm dứt sớm. Điều này khiến AndroidKeystore gặp phải tình trạng từ chối dịch vụ (DoS) và bị khoá không mong muốn. Ví dụ: nếu nhiều ứng dụng bị đánh thức cùng một lúc do các hoạt động tối ưu hoá quản lý nguồn pin và cố gắng thực hiện hoạt động mã hoá, thì các ứng dụng đó sẽ bắt đầu chấm dứt các hoạt động khác mà không thực hiện tiến trình nào.

Để thoát khỏi tình trạng tắc nghẽn trực tiếp và nỗ lực ngăn chặn DoS, chúng tôi đã thay đổi chiến lược cắt giảm để ưu tiên các ứng dụng khách sử dụng ít chỗ cho hoạt động trong thời gian ngắn. Do đó, các hoạt động đơn lẻ không kéo dài quá 5 giây hầu như sẽ không kết thúc được bằng chiến lược cắt giảm. Vẫn còn một số thao tác liên quan đến mã hoá hệ thống tệp có thể cắt giảm cả những thao tác này, nhưng những trường hợp đó rất hiếm xảy ra. Do tác dụng phụ của chiến lược mới nhằm cắt giảm hoạt động này, quá trình tạo giờ đây có thể không thành công nếu ứng dụng có năng lực cắt giảm thấp hơn so với tất cả các hoạt động hiện có.

Chiến lược cắt giảm: Để tìm đối tượng phù hợp, chúng tôi tính toán malus cho phương thức gọi và từng hoạt động hiện có. Malus là khái niệm ngược lại với năng lực cắt giảm (phương thức gọi) hoặc có thể hiểu là năng lực chống cắt giảm (hoạt động hiện có). Để có thể cắt giảm một hoạt động, thì phương thức gọi phải tìm một hoạt động có malus cao hơn malus của chính phương thức đó. Để biết thêm thông tin chi tiết về chiến lược cắt giảm, hãy xem phương thức triển khai operation.rs. Trên Android 11 (API cấp 30) trở xuống, KeyStore2 sẽ thăm dò trình nền Kho khoá để xem có chỗ trống cho hoạt động không. Đối với các ứng dụng nhắm mục tiêu Android 11 (API cấp 30) trở xuống, có vẻ như quá trình khởi động đối tượng mật mã và chữ ký luôn thành công. Tuy nhiên, có thể mất nhiều thời gian hơn để nhận được thao tác. Mọi phiên bản Android đều được hưởng lợi từ khả năng lên lịch vùng hoạt động công bằng hơn và mang đến cơ hội tốt hơn để kết thúc hoạt động.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Mã thay đổi: 174664365
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, bạn không thể gửi Intent.ACTION_CLOSE_SYSTEM_DIALOGS trừ phi ứng dụng đó cũng có quyền android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. Hãy lưu ý rằng đây là phiên bản #DROP_CLOSE_SYSTEM_DIALOGS hạn chế hơn, dự kiến ứng dụng sẽ ngừng gửi ý định Intent.ACTION_CLOSE_SYSTEM_DIALOGS sau khi ứng dụng bắt đầu nhắm đến Android 12 (API cấp 31) trở lên.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Mã thay đổi: 173031413
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, vì lý do bảo mật, bạn cần có quyền Manifest.permission.STATUS_BAR để thu gọn các bảng điều khiển trên thanh trạng thái. Phần mềm độc hại đã lợi dụng lỗ hổng này để ngăn người dùng truy cập vào các thông báo quan trọng.

LOW_POWER_EXCEPTIONS

Mã thay đổi: 168936375
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, tất cả các đối tượng LocationRequest được đánh dấu là ngoại lệ gửi công suất thấp nếu phương thức gọi không có quyền LOCATION_HARDWARE, thay vì âm thầm bỏ phần công suất thấp của yêu cầu.

MISSING_EXPORTED_FLAG

Mã thay đổi: 150232615
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, bạn phải chỉ định một giá trị rõ ràng cho thuộc tính android:exported bất cứ khi nào bộ lọc ý định được xác định.

Để tìm hiểu thêm về thay đổi này, hãy xem bài viết Xuất các thành phần một cách an toàn hơn.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

Mã thay đổi: 207557677
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 32) trở lên.

Đối với các ứng dụng nhắm đến Android 12 (API cấp 32) trở lên, cơ chế phân bổ vùng nhớ khối xếp gốc trong quy trình AppZygote và các thành phần con cháu của nó sẽ sử dụng một thẻ khác 0 trong byte quan trọng nhất.

Để tìm hiểu thêm về thay đổi này, hãy xem bài viết Con trỏ được gắn thẻ.

NATIVE_HEAP_ZERO_INIT

Mã thay đổi: 178038272
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Bật tính năng tự động khởi chạy không phân bổ bộ nhớ vùng nhớ khối xếp gốc.

NATIVE_MEMTAG_ASYNC

Mã thay đổi: 135772972
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Bật tính năng kiểm tra bộ nhớ không đồng bộ (ASYNC) trong quá trình này. Cờ này chỉ ảnh hưởng đến phần cứng hỗ trợ Tiện ích gắn thẻ bộ nhớ (MTE) ARM.

NATIVE_MEMTAG_SYNC

Mã thay đổi: 177438394
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Bật tính năng kiểm tra thẻ nhớ đồng bộ (SYNC) trong quá trình này. Cờ này chỉ ảnh hưởng đến phần cứng hỗ trợ Tiện ích gắn thẻ bộ nhớ (MTE) ARM. Nếu cả NATIVE_MEMTAG_ASYNC và cờ này đều được bật, thì cờ này sẽ được ưu tiên và MTE sẽ được bật ở chế độ SYNC.

NEVER_SANDBOX_DISPLAY_APIS

Mã thay đổi: 184838306
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Khi bật, hộp cát của API Hiển thị sẽ không áp dụng cho hộp thư hoặc hoạt động SCM. API Hiển thị sẽ tiếp tục cung cấp các giới hạn của DisplayArea.

Để tìm hiểu thêm về thay đổi này, hãy xem phần về Các phương thức Hiển thị đã ngừng hoạt động trên trang Các thay đổi trong hành vi của Android 12.

NOTIFICATION_CANCELLATION_REASONS

Mã thay đổi: 175319604
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Cho phép người nghe thông báo hiểu các lý do huỷ mới cụ thể hơn.

NOTIFICATION_TRAMPOLINE_BLOCK

Mã thay đổi: 167676448
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Để cải thiện hiệu suất và trải nghiệm người dùng của ứng dụng, các ứng dụng nhắm đến Android 12 không thể dùng các dịch vụ hoặc broadcast receiver làm thành phần phản hồi với thao tác nhấn vào thông báo.

Để tìm hiểu thêm về thay đổi này, hãy xem phần Không thể tạo thành phần phản hồi với thao tác nhấn vào thông báo từ các dịch vụ hoặc broadcast receiver.

NULL_TELEPHONY_THROW_NO_CB

Mã thay đổi: 182185642
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Dùng để kiểm tra xem phiên bản SDK mục tiêu cho quy trình hiện tại có phải là Android 12 (API cấp 31) trở lên hay không.

Áp dụng cho các phương thức sau:

OVERRIDE_MIN_ASPECT_RATIO

Mã thay đổi: 174042980
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Thay đổi này là yếu tố thúc đẩy tất cả thay đổi có hành vi buộc áp dụng tỷ lệ khung hình tối thiểu nhất định. Khi bật đổi thay đổi này, hệ thống sẽ áp dụng tỷ lệ khung hình tối thiểu sau đây:

Khi thay đổi này được bật đối với một gói ứng dụng, tỷ lệ khung hình tối thiểu được cung cấp trong tệp kê khai của ứng dụng sẽ được ghi đè thành tỷ lệ khung hình lớn nhất được bật, trừ khi giá trị trong tệp kê khai của ứng dụng cao hơn.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Mã thay đổi: 180326787
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu OVERRIDE_MIN_ASPECT_RATIO được bật cùng, việc bật thay đổi này cho một gói sẽ thiết lập tỷ lệ khung hình tối thiểu của hoạt động thành một giá trị lớn do OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE xác định.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Mã thay đổi: 180326845
Trạng thái mặc định: Tắt đối với tất cả ứng dụng.

Nếu OVERRIDE_MIN_ASPECT_RATIO được bật cùng, việc bật thay đổi này cho một gói sẽ thiết lập tỷ lệ khung hình tối thiểu của hoạt động thành một giá trị trung bình do OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE xác định.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Mã thay đổi: 160794467
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, bạn phải chỉ định khả năng biến đổi của từng đối tượng PendingIntent mà ứng dụng của bạn tạo ra. Yêu cầu bổ sung này giúp cải thiện tính bảo mật của ứng dụng.

Để tìm hiểu thêm về thay đổi này, hãy xem bài viết Ý định đang chờ xử lý phải khai báo khả năng biến đổi.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Mã thay đổi: 165573442
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Các ứng dụng quản trị nhắm đến Android 12 (API cấp 31) trở lên không thể sử dụng DevicePolicyManager.setPasswordQuality(ComponentName, int) để đặt chất lượng mật khẩu trên thực thể DevicePolicyManager nhận được bằng cách gọi DevicePolicyManager.getParentProfileInstance(ComponentName). Thay vào đó, họ nên sử dụng DevicePolicyManager.setRequiredPasswordComplexity(int) để đặt ra các yêu cầu tương đối về mật khẩu trên toàn thiết bị.

RATE_LIMIT_TOASTS

Mã thay đổi: 174840628
Trạng thái mặc định: Không thể bật/tắt thay đổi này. Chỉ có khung tương thích ghi lại nhật ký này.

Bật giới hạn số lượng lệnh gọi Toast.show() để ngăn việc gửi quá nhiều thông báo ngắn cho người dùng trong một khoảng thời gian có hạn. Nếu bạn cố gắng hiện nhiều thông báo ngắn hơn mức cho phép trong một khung thời gian nhất định, thì sẽ dẫn đến việc thông báo ngắn bị loại bỏ.

REQUIRE_EXACT_ALARM_PERMISSION

Mã thay đổi: 171306433
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, ứng dụng phải có quyền Manifest.permission.SCHEDULE_EXACT_ALARM để sử dụng bất kỳ API nào nhằm đặt chuông báo chính xác, chẳng hạn như setExactAndAllowWhileIdle(int, long, PendingIntent)setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

Mã thay đổi: 182478738
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, ứng dụng phải có quyền Manifest.permission.READ_PHONE_STATE để gọi TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

Mã thay đổi: 184323934
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, ứng dụng phải có quyền Manifest.permission.READ_PHONE_STATE để gọi TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

Mã thay đổi: 183164979
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, ứng dụng phải có quyền Manifest.permission.READ_PHONE_STATE để gọi TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

Mã thay đổi: 171032338
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với các ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, adb backup sẽ tự động được bật cho các ứng dụng chạy dưới dạng có thể gỡ lỗi (android:debuggable được đặt thành true) và không dùng được với mọi ứng dụng khác.

RESTRICT_DOMAINS

Mã thay đổi: 175408749
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, bạn bắt buộc phải cập nhật biểu mẫu mới của API xác minh đường liên kết trong ứng dụng. Yêu cầu này nghĩa là ứng dụng phải khai báo các miền bên trong một bộ lọc ý định bao gồm tất cả những nội dung sau:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Chỉ IntentFilter.SCHEME_HTTP và/hoặc IntentFilter.SCHEME_HTTPS, không có giao thức nào khác

Trên các phiên bản Android trước, bạn không bắt buộc phải dùng Intent.CATEGORY_BROWSABLE, các giao thức khác đã được cho phép. Việc đặt autoVerify thành true trong bộ lọc ý định bất kỳ sẽ ngầm ẩn rằng tất cả bộ lọc ý định đã được đặt thành autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Mã thay đổi: 151105954
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, thực thi việc tất cả attributionTags gửi đến noteOp(String, int, String), noteProxyOp(String, String)startOp(String, int, String) đều được xác định trong tệp kê khai của gói được chỉ định làm tham số của các phương thức.

Để bật thay đổi này, cả gói gọi noteOp(String, int, String) lẫn gói được chỉ định làm tham số của phương thức đều phải bật thay đổi này.

SELINUX_LATEST_CHANGES

Mã thay đổi: 143539591
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, hãy chọn chấp nhận những thay đổi mới nhất về SELinux. Việc tắt thay đổi này đối với một ứng dụng nhắm đến Android 12 (API cấp 31) trở lên là không hoạt động và không ảnh hưởng đến các ứng dụng dùng mã nhận dạng người dùng chung.

SETTINGS_API_V2

Mã thay đổi: 178111421
Trạng thái mặc định: Bật đối với tất cả ứng dụng.

API lựa chọn ưu tiên của người dùng mới để xác minh miền được đánh dấu là autoVerify=true trong bộ lọc ý định AndroidManifest.xml chưa được triển khai trong bản xem trước nền tảng hiện tại. Hiện tại, bạn có thể xem trước các thay đổi mới đối với lựa chọn ưu tiên cho người dùng bằng cách bật ChangeId này, đồng thời sử dụng adb shell pm set-app-links-user-selection và các lệnh tương tự.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Mã thay đổi: 183972877
Trạng thái mặc định: Bật đối với những ứng dụng nhắm đến Android 12 (API cấp 31) trở lên.

Đối với ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, hãy xác định xem có sử dụng thời gian chờ ngắn hơn trước khi nâng bộ chứa chế độ chờ lên ACTIVE khi ứng dụng bắt đầu dịch vụ trên nền trước hay không.