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 thuộc 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.

Các thay đổi về hành vi được thêm 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 cách sử dụng khung tự động điền tăng cường (xem dịch vụ tự động điền). Để có thể xử lý những đề xuất này, ứng dụng thường phải triển khai API OnReceiveContentListener.

Để việc sử dụng API này trở nên mượt mà hơn cho các ứng dụng từng triển khai API InputConnection.commitContent(InputContentInfo, int, Bundle), chúng tôi 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. 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, chẳng hạn như 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 các đề 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ờ này có thể chỉ được các thành phần hệ thống sử dụng vì đó là trường không được hỗ trợ. Nếu có, 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 ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, bạn phải thay thế toàn bộ hoạt động 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 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 mục tiêu Android 12 (API cấp 31) trở lên, bạn không thể sử dụng API hệ thống LocationRequest với các yêu cầu 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ì trải nghiệm tốt và bảo mật của hệ thống, Android 12 ngăn các ứng dụng dùng sự kiện chạm, trong đó lớp phủ 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 Các sự kiện chạm không đáng tin cậy đã bị chặn.

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 các ứng dụng nhắm mục tiêu đến Android 12 (API cấp 32) trở lên, hãy điều chỉnh vòng đời của kết quả hoạt động để đảm bảo rằng một hoạt động sẽ 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 ứng dụng nhắm đến Android 12 (API cấp 32) trở lên, trình quản lý gói sẽ không cài đặ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, bạn cũng phải xác định nhóm đó.

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 nhắm mục tiêu Android 12 (API cấp 31) trở lên, SecurityException sẽ được gửi khi các ứng dụng đó ở trạng thái uỷ quyền bị từ chối và tìm cách 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 đến Android 12 (API cấp 31) trở lên, hệ thống sẽ gửi SecurityException 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 đế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 một số chia sẻ 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 sử dụng Display.getRefreshRate()Display.Mode.getRefreshRate() để biết tốc độ làm mới màn hình là gì. 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 để 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 thành một bản phát hành trước đó và kể từ Android 12 (API cấp 31), thao tác này 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, hệ số tỷ lệ sau đây sẽ được áp dụng:

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ó 90% độ phân giải thực theo chiều dọc và chiều ngang của màn hình thực.

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ý 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 đến các phiên bản Android cũ hơn không mong đợi sẽ nhận được Windows lớn hơn 1080p, vì vậy Windows của họ sẽ được giảm xuống 1080p khi cần.

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 khả năng kiểm soát của người dùng khi tương tác với các ứng dụng và hệ thống, thao tác theo ý định ACTION_CLOSE_SYSTEM_DIALOGS sẽ không được dùng nữa kể từ Android 12.

Để tìm hiểu thêm về thay đổi này, hãy xem phần Ứ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.

Ứ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 lựa chọn này để trì hoãn quá trình quét được kích hoạt trong 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 các ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, tính năng bảo vệ READ_PHONE_STATE sẽ bật trên các API truy vấn và thông báo trạng thái cuộc 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 các ứ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 để thêm các hàng cơ sở dữ liệu gồm các tệp của một ổ đĩa chưa liên kết 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 thô vào bộ nhớ ngoài.

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 các ứng dụng nhắm mục tiêu Android 12 (API cấp 31) trở lên, tất cả chuông báo không chính xác đều phải có kích thước cửa sổ tối thiểu, dự kiến là khoảng vài phút. Trên thực tế, mọi chuông báo cần thời lượng nhỏ hơn đều 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). Thông báo không chính xác có khoảng thời gian ngắn hơn được chỉ định sẽ khiến hệ thống kéo dài cửa sổ.

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 đối với thư viện gốc công khai dùng chung, được nhà sản xuất thiết bị xác định bằng cách sử dụng thẻ uses-native-library trong AndroidManifest.xml. Nếu bạn không đáp ứng được bất cứ phần phụ thuộc nào (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 dưới dạng 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 đó, nếu không đáp ứng được phần phụ thuộc đó, thì quá trình cài đặt vẫn sẽ được duy trì.

Sau khi cài đặt, một ứng dụng chỉ được cung cấp các thư viện gốc dùng chung được chỉ định trong tệp kê khai ứng dụng. Việc gọi dlopen trên một thư viện gốc dùng chung không xuất hiện trong tệp kê khai ứng dụng sẽ không thành công 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, chế độ cài đặt nà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 các ứng dụng nhắm mục tiêu 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ố gắng khởi động một dịch vụ trên nền trước trong khi 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 các ứng dụng nhắm mục tiêu đế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, kết nối đầu vào hiện tại sẽ tự động tắt 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 đặt cờ này sẽ ghi đè mọi giá trị 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, 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 một ứng dụng bật tính năng hỗ trợ tính năng đa phương tiện HEVC. Các ứng dụng nên khai báo tính năng đa phương tiện được hỗ trợ trong tệp kê khai, nhưng 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 đặt 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, 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 chuyển sang chế độ nhiều cửa sổ có thể thay đổ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 ứ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, android:allowBackup sẽ bị bỏ qua đối với các ứng dụng trong quá trình di chuyển từ thiết bị này sang thiết bị khác (D2D).

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 các ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, các quy tắc bao gồm và loại trừ đượ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 đến 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 mục tiêu 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 những ứ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 hoạt động 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ả hoạt động hiện tại.

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 ứng dụng nhắm mục tiêu 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. Xin 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 khởi động 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, bạn cần có quyền Manifest.permission.STATUS_BAR để thu gọn các bảng điều khiển thanh trạng thái vì lý do bảo mật. Tính năng này đã bị phần mềm độc hại khai thác để 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 ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, tất cả đối tượng LocationRequest được đánh dấu là ngoại lệ gửi dữ liệu năng lượng thấp nếu phương thức gọi không có quyền LOCATION_HARDWARE, thay vì ngầm bỏ phần năng lượng 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 xác định bộ lọc ý định.

Để tìm hiểu thêm về thay đổi này, hãy xem nội dung Xuất các thành phần 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 ứng dụng nhắm đến Android 12 (API cấp 32) trở lên, việc 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 tại trang Các thay đổi về 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 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 được sử 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 cho 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 phần Ý đị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 có được bằng cách gọi DevicePolicyManager.getParentProfileInstance(ComponentName). Thay vào đó, các ứng dụng đó nên sử dụng DevicePolicyManager.setRequiredPasswordComplexity(int) để đặt các yêu cầu chi tiết 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 thì mới dùng được 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 mục tiêu đến Android 12 (API cấp 31) trở lên, adb backup sẽ tự động được bật đối với các ứng dụng chạy ở dạng có thể gỡ lỗi (android:debuggable được đặt thành true) và không có sẵn cho bất kỳ ứng dụng nào 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 mục tiêu 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 đã cập nhật của API xác minh đường liên kết ứng dụng. Yêu cầu này nghĩa là ứng dụng phải khai báo miền bên trong 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, Intent.CATEGORY_BROWSABLE là không bắt buộc, chúng tôi cho phép các giao thức khác và việc đặt autoVerify thành true trong bất kỳ bộ lọc ý định nào sẽ ngầm giả vờ 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 đến 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 đến Android 12 (API cấp 31) trở lên, hãy chọn áp dụng những thay đổi mới nhất đối với SELinux. Thay đổi này sẽ không hoạt động đối với một ứng dụng nhắm đến Android 12 (API cấp 31) trở lên. Thay đổi này không có hiệu lực đối với những ứng dụng dùng chung mã nhận dạng người dùng.

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 mới của người dùng để 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 đối với lựa chọn ưu tiên mới của người dùng bằng cách bật Mã thay đổi 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 các ứng dụng nhắm đến Android 12 (API cấp 31) trở lên, hãy xác định xem có nên 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 các ứng dụng bắt đầu dịch vụ trên nền trước hay không.