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ỉ áp dụng cho ứng dụng nhắm đến Android 17 trở lên. Nếu ứng dụng của bạn nhắm đế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 (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 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 giúp 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 MessageQueue mới không khoá
Bắt đầu từ Android 17, các ứng dụng nhắm đến Android 17 (cấp độ API 37) trở lên sẽ nhận được một chế độ triển khai mới không khoá của android.os.MessageQueue. Việc triển khai mới này giúp cải thiện hiệu suất và giảm số khung hình bị bỏ lỡ, nhưng có thể làm hỏng những ứng dụng phản ánh các trường và phương thức riêng tư MessageQueue.
Để biết thêm thông tin, bao gồm cả các chiến lược giảm thiểu, hãy xem Hướng dẫn về thay đổi hành vi MessageQueue.
Các trường cuối cùng tĩnh hiện không thể sửa đổi
Apps running on Android 17 or higher that target
Android 17 (API level 37) or higher cannot change static final fields. If
an app attempts to change a static final field by using reflection, it will
cause an IllegalAccessException. Attempting to modify one of these fields
through JNI APIs (such as SetStaticLongField()) will cause the app to crash.
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ý của 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)
Android 17 introduces platform support for Encrypted Client Hello (ECH), a TLS extension that enhances user privacy by encrypting the Server Name Indication (SNI) in the TLS handshake. This encryption helps prevent network observers from easily identifying the specific domain your app is connecting to.
For apps targeting Android 17 (API level 37) or higher, ECH is used for TLS connections. ECH is active only if the networking library used by the app (for example, HttpEngine, WebView, or OkHttp) has integrated ECH support and the remote server also supports the ECH protocol. If ECH cannot be negotiated, the client sends an ECH extension with randomized contents (a mechanism called ECH GREASE). See RFC 9849 for more details on how ECH GREASE works.
To allow apps to customize this behavior, Android 17 adds a new
<domainEncryption> element to the Network Security Configuration file.
Developers can use <domainEncryption> within <base-config> or
<domain-config> tags to select an ECH mode (for example,
"enabled" or "disabled") on a global or per-domain basis.
For more information, see the Encrypted Client Hello documentation.
Ứ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 introduces the ACCESS_LOCAL_NETWORK runtime permission
to protect users from unauthorized local network access. Because this falls
under the existing NEARBY_DEVICES permission group, users who have already
granted other NEARBY_DEVICES permissions aren't prompted again. This new
requirement prevents malicious apps from exploiting unrestricted local network
access for covert user tracking and fingerprinting. By declaring and requesting
this permission, your app can discover and connect to devices on the local area
network (LAN), such as smart home devices or casting receivers.
Apps targeting Android 17 (API level 37) or higher now have two paths to maintain communication with LAN devices: Adopt system-mediated, privacy-preserving device pickers to skip the permission prompt, or explicitly request this new permission at runtime to maintain local network communication.
For more information, see the Local network permission documentation.
Ẩn mật khẩu trên thiết bị thực
Nếu một ứng dụng nhắm đến Android 17 (API cấp 37) trở lên và người dùng đang sử dụng một thiết bị đầu vào thực (ví dụ: bàn phím ngoài), thì hệ điều hành Android sẽ áp dụng chế độ cài đặt show_passwords_physical mới cho tất cả các ký tự trong trường mật khẩu. Theo mặc định, chế độ cài đặt đó sẽ ẩn tất cả các ký tự mật khẩu.
Hệ thống Android hiện ký tự mật khẩu được nhập gần đây nhất để giúp người dùng biết họ có nhập sai mật khẩu hay không. Tuy nhiên, điều này ít cần thiết hơn nhiều khi dùng bàn phím ngoài có kích thước lớn. Ngoài ra, các thiết bị có bàn phím bên ngoài thường có màn hình lớn hơn, điều này làm tăng nguy cơ có người nhìn thấy mật khẩu đã nhập.
Nếu người dùng đang sử dụng màn hình cảm ứng của thiết bị, hệ thống sẽ áp dụng chế độ cài đặt show_passwords_touch mới.
Bảo vệ OTP cho tin nhắn SMS tiêu chuẩn
Kể từ Android 17, Android sẽ mở rộng tính năng bảo vệ OTP qua SMS để áp dụng cho tin nhắn SMS tiêu chuẩn (tin nhắn SMS chứa OTP không sử dụng định dạng WebOTP hoặc SMS Retriever). Đối với hầu hết các ứng dụng nhắm đến Android 17 (cấp độ API 37) trở lên, những tin nhắn SMS này sẽ không có sẵn cho đến 3 giờ sau khi nhận. Việc trì hoãn này nhằm giúp ngăn chặn hành vi đánh cắp OTP. Trong thời gian trì hoãn 3 giờ này, thông báo SMS_RECEIVED_ACTION sẽ bị giữ lại và các truy vấn cơ sở dữ liệu của nhà cung cấp dịch vụ SMS sẽ được lọc. Sau khi có độ trễ, các ứng dụng này sẽ nhận được tin nhắn SMS.
Một số ứng dụng như ứng dụng trợ lý SMS mặc định, ứng dụng đồng hành của thiết bị thông minh, v.v. được miễn trừ khỏi quy định về độ trễ này. Tất cả các ứng dụng dựa vào việc đọc tin nhắn SMS để trích xuất OTP đều phải chuyển sang sử dụng API SMS Retriever hoặc SMS User Consent để đảm bảo chức năng tiếp tục hoạt động.
Bảo mật
Android 17 có những điểm cải tiến sau đây về tính bảo mật của thiết bị và ứng dụng.
Bảo mật hoạt động
In Android 17, the platform continues its shift toward a "secure-by-default" architecture, introducing a suite of enhancements designed to mitigate high-severity exploits such as phishing, interaction hijacking, and confused deputy attacks. This update requires developers to explicitly opt in to new security standards to maintain app compatibility and user protection.
Key impacts for developers include:
- BAL hardening & improved opt-in: We are refining Background Activity
Launch (BAL) restrictions by extending protections to
IntentSender. Developers must migrate away from the legacyMODE_BACKGROUND_ACTIVITY_START_ALLOWEDconstant. Instead, you should adopt granular controls likeMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, which restricts activity starts to scenarios where the calling app is visible, significantly reducing the attack surface. - Adoption tools: Developers should utilize strict mode and updated lint checks to identify legacy patterns and ensure readiness for future target SDK requirements.
Bật CT theo mặc định
If an app targets Android 17 (API level 37) or higher, certificate transparency (CT) is enabled by default. (On Android 16, CT is available but apps had to opt in.)
DCL gốc an toàn hơn – C
If your app targets Android 17 (API level 37) or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries.
All native files loaded using System.load() must be marked as read-only.
Otherwise, the system throws UnsatisfiedLinkError.
We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.
Hạn chế các trường PII trong chế độ xem dữ liệu 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, Trình cung cấp danh bạ 2 (CP2) sẽ hạn chế một số cột chứa thông tin nhận dạng cá nhân (PII) trong chế độ xem dữ liệu. Khi bạn bật thay đổi này, các cột này sẽ bị xoá khỏi chế độ xem dữ liệu để tăng cường quyền riêng tư của người dùng. Các cột bị hạn chế bao gồm:
Các ứng dụng đang sử dụng những cột này từ ContactsContract.Data có thể trích xuất chúng từ ContactsContract.RawContacts thay vì vậy, bằng cách kết hợp với RAW_CONTACT_ID.
Thực thi các quy trình kiểm tra SQL nghiêm ngặt trong CP2
For apps targeting Android 17 (API level Android 17 (API level 37)) and
higher, Contacts Provider 2 (CP2) enforces strict SQL query validation when
the ContactsContract.Data table is accessed without
READ_CONTACTS permission.
With this change, if an app doesn't have READ_CONTACTS
permission, StrictColumns and
StrictGrammar options are set when querying
the ContactsContract.Data table. If a query
uses a pattern that isn't compatible with these, it will be
rejected and cause an exception to be thrown.
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
Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.
Some audio restrictions apply to all apps. However, the restrictions are more stringent if an app targets Android 17 (API level 37). If one of these apps interacts with audio while it is in the background, it must have a foreground service running. In addition, the app must meet one or both of these requirements:
- The foreground service must have while-in-use (WIU) capabilities.
- The app must have the exact alarm permission and be interacting with
USAGE_ALARMaudio streams.
For more information, including mitigation strategies, see Background audio hardening.
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 thiết bị và kiểu dáng.
Các thay đổi về Platform API để bỏ qua các hạn chế 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)
Chúng tôi đã giới thiệu các thay đổi về Platform API trong Android 16 để bỏ qua các hạn chế về hướng, tỷ lệ khung hình và khả năng đổi kích thước trên màn hình lớn (sw >= 600dp) đối với các ứng dụng nhắm đến API cấp 36 trở lên. Nhà phát triển có thể chọn không áp dụng những thay đổi này bằng SDK 36, nhưng lựa chọn không áp dụng này sẽ không còn dùng được cho các ứng dụng nhắm đến Android 17 (cấp độ API 37) trở lên.
Để biết thêm thông tin, hãy xem phần Các hạn chế về hướng và khả năng thay đổi kích thước sẽ bị bỏ qua.
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à điều chỉnh theo hành vi InputStream tiêu chuẩn của Java 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
For apps targeting Android 17 (API level 37), the
read() method of the InputStream obtained from an
RFCOMM-based BluetoothSocket now returns -1 when the
socket is closed or the connection is dropped.
This change makes RFCOMM socket behavior consistent with LE CoC sockets and
aligns with the standard InputStream.read()
documentation, which states that -1 is returned when the end of the stream is
reached.
Apps that rely solely on catching an IOException to break out of a read loop may
be impacted by this change and should update the BluetoothSocket read loops to
explicitly check for a return value of -1. This ensures the loop terminates
correctly when the remote device disconnects or the socket is closed. For an
example of the recommended implementation, see the
code snippet in the Transfer Bluetooth data
guide.