Giống như các bản phát hành trước, Android 17 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ỉ tác động đến ứng dụng hướng đến Android 17 trở lên. Nếu ứng dụng của bạn hướng đến Android 17 trở lên, bạn nên điều chỉnh ứng dụng để hỗ trợ những hành vi này cho phù hợp (nếu cần).
Ngoài ra, hãy nhớ tham khảo danh sách thay đổi về hành vi ảnh hưởng đến tất cả ứng dụng
chạy trên Android 17 bất kể targetSdkVersion của ứng dụng.
Chức năng cốt lõi
Android 17 có những thay đổi sau đây nhằm sửa đổi hoặc mở rộng nhiều chức năng cốt lõi của hệ thống Android.
Cách triển khai mới không cần khoá của MessageQueue
从 Android 17 开始,以 Android 17(API 级别 37)
或更高版本为目标平台的应用会收到
android.os.MessageQueue 的新无锁实现。新实现可提升性能并减少丢帧,但可能会破坏反映 MessageQueue 私有字段和方法的客户端。
如需了解详情(包括缓解措施),请参阅 MessageQueue 行为变更指南。
Các trường cuối cùng tĩnh hiện không thể sửa đổi
在以 Android 17(API 级别 37)或更高版本为目标平台的 Android 17 或更高版本上运行的应用无法更改 static final 字段。如果应用尝试使用反射更改 static final 字段,则会导致 IllegalAccessException。尝试通过 JNI API(例如 SetStaticLongField())修改其中一个字段会导致应用崩溃。
Hỗ trợ tiếp cận
Android 17 có những thay đổi sau đây để cải thiện khả năng hỗ trợ tiếp cận.
Hỗ trợ tiếp cận cho việc nhập bằng bàn phím vật lý IME phức tạp
Tính năng này giới thiệu các AccessibilityEvent và TextAttribute
API mới để cải thiện phản hồi bằng giọng nói của trình đọc màn hình cho việc nhập ngôn ngữ CJKV. Giờ đây, các ứng dụng IME CJKV có thể báo hiệu liệu một ứng viên chuyển đổi văn bản đã được chọn trong quá trình soạn văn bản hay chưa. Các ứng dụng có trường chỉnh sửa có thể chỉ định loại thay đổi văn bản khi gửi sự kiện hỗ trợ tiếp cận văn bản đã thay đổi.
Ví dụ: các ứng dụng có thể chỉ định rằng một thay đổi văn bản đã xảy ra trong quá trình soạn văn bản hoặc một thay đổi văn bản là do một thao tác cam kết.
Việc này cho phép các dịch vụ hỗ trợ tiếp cận như trình đọc màn hình đưa ra phản hồi chính xác hơn dựa trên bản chất của việc sửa đổi văn bản.
Số ứng dụng sử dụng
Ứng dụng IME: Khi đặt văn bản soạn trong các trường chỉnh sửa, IME có thể sử dụng
TextAttribute.Builder.setTextSuggestionSelected()để cho biết liệu một ứng viên chuyển đổi cụ thể có được chọn hay không.Ứng dụng có trường chỉnh sửa: Các ứng dụng duy trì
InputConnectiontuỳ chỉnh có thể truy xuất dữ liệu lựa chọn ứng viên bằng cách gọiTextAttribute.isTextSuggestionSelected(). Sau đó, các ứng dụng này sẽ gọiAccessibilityEvent.setTextChangeTypes()khi gửi các sự kiệnTYPE_VIEW_TEXT_CHANGED. Các ứng dụng nhắm đến Android 17 (cấp độ API 37) sử dụngTextViewtiêu chuẩn sẽ bật tính năng này theo mặc định. (Tức làTextViewsẽ xử lý việc truy xuất dữ liệu từ IME và đặt các loại thay đổi văn bản khi gửi sự kiện đến các dịch vụ hỗ trợ tiếp cận).Dịch vụ hỗ trợ tiếp cận: Các dịch vụ hỗ trợ tiếp cận xử lý sự kiện
TYPE_VIEW_TEXT_CHANGEDcó thể gọiAccessibilityEvent.getTextChangeTypes()để xác định bản chất của việc sửa đổi và điều chỉnh chiến lược phản hồi cho phù hợp.
Quyền riêng tư
Android 17 có những thay đổi sau đây để cải thiện quyền riêng tư của người dùng.
Đã bật ECH (Encrypted Client Hello – Lời chào được mã hoá của máy khách)
Android 17 giới thiệu tính năng hỗ trợ nền tảng cho Encrypted Client Hello (ECH), một tiện ích TLS giúp tăng cường quyền riêng tư của người dùng bằng cách mã hoá Chỉ báo tên máy chủ (SNI) trong quy trình bắt tay TLS. Quá trình mã hoá này giúp ngăn chặn những người quan sát mạng dễ dàng xác định miền cụ thể mà ứng dụng của bạn đang kết nối.
Đối với các ứng dụng nhắm đến Android 17 (cấp độ API 37) trở lên, ECH được dùng cho các kết nối TLS. ECH chỉ hoạt động nếu thư viện mạng mà ứng dụng sử dụng (ví dụ: HttpEngine, WebView hoặc OkHttp) đã tích hợp tính năng hỗ trợ ECH và máy chủ từ xa cũng hỗ trợ giao thức ECH. Nếu không thương lượng được ECH, máy khách sẽ gửi một tiện ích ECH có nội dung ngẫu nhiên (một cơ chế gọi là ECH GREASE). Hãy xem RFC 9849 để biết thêm thông tin chi tiết về cách hoạt động của ECH GREASE.
Để cho phép các ứng dụng tuỳ chỉnh hành vi này, Android 17 sẽ thêm một phần tử <domainEncryption> mới vào tệp Cấu hình bảo mật mạng.
Nhà phát triển có thể sử dụng <domainEncryption> trong thẻ <base-config> hoặc <domain-config> để chọn một chế độ ECH (ví dụ: "enabled" hoặc "disabled") trên cơ sở toàn cầu hoặc theo từng miền.
Để biết thêm thông tin, hãy xem tài liệu về Encrypted Client Hello.
Ứng dụng nhắm đến Android 17 cần có quyền truy cập vào mạng cục bộ
Android 17 引入了 ACCESS_LOCAL_NETWORK 运行时权限,以保护用户免遭未经授权的本地网络访问。由于此权限属于现有的 NEARBY_DEVICES 权限组,因此系统不会再次提示已授予其他 NEARBY_DEVICES 权限的用户。这项新要求可防止恶意应用利用不受限制的本地网络访问权限进行隐秘的用户跟踪和指纹识别。通过声明和请求此权限,您的应用可以发现并连接到局域网 (LAN) 中的设备,例如智能家居设备或投屏接收器。
以 Android 17(API 级别 37)或更高版本为目标平台的应用现在可以通过两种方式与 LAN 设备保持通信:采用系统介导的、可保护隐私的设备选择器来跳过权限提示,或者在运行时明确请求此新权限以保持本地网络通信。
如需了解详情,请参阅本地网络权限文档。
Ẩn mật khẩu khỏi thiết bị vật lý
If an app targets Android 17 (API level 37) or higher and the user is using
a physical input device (for example, an external keyboard), the Android
operating system applies the new show_passwords_physical setting to all
characters in the password field. By default, that setting hides all password
characters.
The Android system shows the last-typed password character to help the user see if they mistyped the password. However, this is much less necessary with larger external keyboards. In addition, devices with external keyboards often have larger displays, which increases the danger of someone seeing the typed password.
If the user is using the device's touchscreen, the system applies the new
show_passwords_touch setting.
Bảo vệ OTP cho tin nhắn SMS tiêu chuẩn
从 Android 17 开始,Android 将扩展其短信验证码保护功能,以适用于标准短信(包含验证码但不使用 WebOTP 或 SMS Retriever 格式的短信)。对于以 Android 17(API 级别 37)或更高版本为目标平台的应用,这些短信在收到后三小时内不会提供。此延迟旨在帮助防止动态密码劫持。在这三小时的延迟期间,系统会保留
SMS_RECEIVED_ACTION广播,并过滤
短信提供商数据库查询。延迟结束后,这些应用即可使用短信。
某些应用(例如默认短信助理应用、已连接的设备配套应用等)不受此延迟限制。所有依赖于读取短信 来提取动态密码的应用都应改用 SMS Retriever 或 SMS User Consent API,以确保功能持续可用。
Bảo mật
Android 17 có những cải tiến sau đây về bảo mật thiết bị và ứng dụng.
Bảo mật hoạt động
Trong Android 17, nền tảng này tiếp tục chuyển sang cấu trúc "bảo mật theo mặc định", giới thiệu một bộ các điểm cải tiến được thiết kế để giảm thiểu các hành vi khai thác ở mức độ nghiêm trọng cao, chẳng hạn như tấn công giả mạo, chiếm đoạt tương tác và tấn công nhầm lẫn. Bản cập nhật này yêu cầu nhà phát triển phải chọn sử dụng các tiêu chuẩn bảo mật mới một cách rõ ràng để duy trì khả năng tương thích của ứng dụng và bảo vệ người dùng.
Sau đây là những tác động chính đối với nhà phát triển:
- Tăng cường BAL và cải thiện lựa chọn tham gia: Chúng tôi đang tinh chỉnh các quy tắc hạn chế về Hoạt động khởi chạy ở chế độ nền (BAL) bằng cách mở rộng các biện pháp bảo vệ cho
IntentSender. Nhà phát triển phải di chuyển khỏi hằng sốMODE_BACKGROUND_ACTIVITY_START_ALLOWEDcũ. Thay vào đó, bạn nên áp dụng các chế độ kiểm soát chi tiết nhưMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE. Chế độ này hạn chế hoạt động bắt đầu trong các trường hợp ứng dụng gọi điện có thể nhìn thấy, giúp giảm đáng kể bề mặt tấn công. - Công cụ áp dụng: Nhà phát triển nên sử dụng chế độ nghiêm ngặt và các chế độ kiểm tra lint mới nhất để xác định các mẫu cũ và đảm bảo đáp ứng các yêu cầu về SDK mục tiêu trong tương lai.
Bật CT theo mặc định
如果应用以 Android 17(API 级别 37)或更高版本为目标平台,则默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)
DCL gốc an toàn hơn – C
Nếu ứng dụng của bạn nhắm đến Android 17 (cấp độ API 37) trở lên, thì tính năng bảo vệ Tải mã động (DCL) an toàn hơn được giới thiệu trong Android 14 cho các tệp DEX và JAR hiện đã mở rộng sang các thư viện gốc.
Tất cả các tệp gốc được tải bằng System.load() đều phải được đánh dấu là chỉ có quyền đọc.
Nếu không, hệ thống sẽ gửi ra UnsatisfiedLinkError.
Bất cứ khi nào có thể thì bạn nên tránh tải mã động, vì làm như vậy sẽ làm tăng đáng kể nguy cơ ứng dụng có thể bị xâm phạm do bị chèn mã hoặc can thiệp vào mã.
Hạn chế các trường PII trong chế độ xem dữ liệu CP2
对于以 Android 17(API 级别 Android 17(API 级别 37))及更高版本为目标平台的应用,联系人提供程序 2 (CP2) 会限制数据视图中包含某些个人身份信息 (PII) 的列。启用此变更后,这些列将从数据视图中移除,以增强用户隐私保护。 受限列包括:
如果应用正在使用 ContactsContract.Data
中的这些列,则可以通过与 RAW_CONTACT_ID 联接,改为从 ContactsContract.RawContacts
中提取这些列。
Thực thi các lượt kiểm tra SQL nghiêm ngặt trong CP2
Đối với các ứng dụng nhắm đến Android 17 (cấp độ API Android 17 (cấp độ API 37)) trở
lên, Nhà cung cấp danh bạ 2 (CP2) sẽ thực thi quy trình xác thực nghiêm ngặt đối với truy vấn SQL khi
bảng ContactsContract.Data được truy cập mà không có quyền
READ_CONTACTS.
Với thay đổi này, nếu một ứng dụng không có READ_CONTACTS
quyền, thì các tuỳ chọn StrictColumns và
StrictGrammar sẽ được đặt khi truy vấn
bảng ContactsContract.Data. Nếu một truy vấn sử dụng mẫu không tương thích với các tuỳ chọn này, thì truy vấn đó sẽ bị từ chối và gây ra một ngoại lệ.
Nội dung nghe nhìn
Android 17 có những thay đổi sau đây về hành vi của nội dung nghe nhìn.
Tăng cường bảo mật âm thanh ở chế độ nền
从 Android 17 开始,音频框架对后台音频互动(包括音频播放、音频焦点请求和音量更改 API)强制执行限制,以确保这些更改是由用户有意启动的。
部分音频限制适用于所有应用。不过,如果应用以 Android 17(API 级别 37)为目标平台,则限制会更加严格。如果这些应用在后台运行时与音频互动,则必须有前台服务正在运行。此外,应用还必须满足以下一项或两项要求:
- 前台服务必须具有仅在使用时授予的权限 (WIU)。
- 应用必须具有精确闹钟权限,并且正在与
USAGE_ALARM音频流互动。
如需了解详情(包括缓解措施),请参阅后台音频安全加固。
Kiểu dáng thiết bị
Android 17 có những thay đổi sau đây để cải thiện trải nghiệm người dùng trên nhiều kích thước và kiểu dáng thiết bị.
Các thay đổi về API nền tảng để bỏ qua các ràng buộc về hướng, khả năng đổi kích thước và tỷ lệ khung hình trên màn hình lớn (sw>=600dp)
我们在 Android 16 中引入了平台 API 变更,以 忽略屏幕方向、 宽高比和尺寸调整能力限制(针对大型屏幕,sw >= 600dp),适用于面向 API 级别 36 或更高级别的应用。开发者可以选择使用 SDK 36 退出这些变更,但对于面向 Android 17(API 级别 37)或更高级别的应用,此退出选项将不再可用。
如需了解详情,请参阅忽略屏幕方向和尺寸调整能力限制。
Khả năng kết nối
Android 17 có thay đổi sau đây để cải thiện tính nhất quán và phù hợp với hành vi InputStream Java tiêu chuẩn cho các điểm kết nối Bluetooth RFCOMM.
Hành vi nhất quán của BluetoothSocket read() đối với RFCOMM
对于以 Android 17(API 级别 37)为目标平台的应用,
read() 方法从InputStream 获取的
基于 RFCOMM 的 BluetoothSocket 现在会在
套接字关闭或连接断开时返回 -1。
此更改使 RFCOMM 套接字行为与 LE CoC 套接字保持一致,并与标准 InputStream.read()
文档保持一致,该文档指出,当到达流的末尾时,系统会返回 -1。
仅依赖于捕获 IOException 以跳出读取循环的应用可能会受到此更改的影响,并且应更新 BluetoothSocket 读取循环以明确检查返回值 -1。这可确保在远程设备断开连接或套接字关闭时,循环正确终止。如需查看推荐的实现示例,请参阅传输蓝牙数据指南中的代码段。