การเปลี่ยนแปลงลักษณะการทำงาน: แอปที่กำหนดเป้าหมายเป็น Android 17 ขึ้นไป

เช่นเดียวกับรุ่นก่อนๆ Android 17 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อ แอปของคุณ การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปที่กำหนดเป้าหมายเป็น Android 17 ขึ้นไปเท่านั้น หากแอปกำหนดเป้าหมายเป็น Android 17 ขึ้นไป คุณควรแก้ไขแอปให้รองรับลักษณะการทำงานเหล่านี้ในกรณีที่เกี่ยวข้อง

นอกจากนี้ โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปทั้งหมด ที่ทำงานบน Android 17 ไม่ว่า targetSdkVersion ของแอปจะเป็นอย่างไร

ฟังก์ชันหลัก

Android 17 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งแก้ไขหรือ ขยายความสามารถหลักต่างๆ ของระบบ Android

การใช้งาน MessageQueue แบบใหม่ที่ไม่มีการล็อก

ตั้งแต่ Android 17 เป็นต้นไป แอปที่กำหนดเป้าหมายเป็น Android 17 หรือสูงกว่าจะได้รับการใช้งานแบบใหม่ที่ไม่มีการล็อกของ android.os.MessageQueue การติดตั้งใช้งานใหม่นี้ช่วยปรับปรุงประสิทธิภาพและ ลดเฟรมที่พลาดไป แต่ก็อาจทำให้ไคลเอ็นต์ที่ใช้ฟิลด์และเมธอดส่วนตัวMessageQueue ใช้งานไม่ได้

ดูข้อมูลเพิ่มเติม รวมถึงกลยุทธ์การลดผลกระทบได้ที่คำแนะนำเกี่ยวกับการเปลี่ยนแปลงลักษณะการทำงานของ MessageQueue

การช่วยเหลือพิเศษ

Android 17 มีการเปลี่ยนแปลงต่อไปนี้เพื่อปรับปรุงการช่วยเหลือพิเศษ

การรองรับการช่วยเหลือพิเศษสำหรับการพิมพ์ด้วยแป้นพิมพ์จริงของ IME ที่ซับซ้อน

此功能引入了新的 AccessibilityEventTextAttribute API,以增强屏幕阅读器针对 CJKV 语言输入的语音反馈。CJKV IME 应用现在可以指示在文本撰写期间是否已选择文本转换候选对象。具有编辑字段的应用可以在发送文本更改无障碍事件时指定文本更改类型。例如,应用可以指定在文本撰写期间发生了文本更改,或者文本更改是由提交导致的。这样做可让屏幕阅读器等无障碍服务根据文本修改的性质提供更精确的反馈。

应用采用量

  • IME 应用:在编辑字段中设置正在撰写的文本时,IME 可以使用 TextAttribute.Builder.setTextSuggestionSelected() 来指明是否选择了特定的转换候选字词。

  • 具有“编辑字段”权限的应用:维护自定义 InputConnection 的应用可以通过调用 TextAttribute.isTextSuggestionSelected() 来检索候选选择数据。然后,这些应用在调度 TYPE_VIEW_TEXT_CHANGED 事件时应调用 AccessibilityEvent.setTextChangeTypes()。以 Android 17 为目标平台且使用标准 TextView 的应用默认会启用此功能。(也就是说,TextView 将负责从 IME 检索数据,并在向无障碍服务发送事件时设置文本更改类型)。

  • 无障碍服务:处理 TYPE_VIEW_TEXT_CHANGED 事件的无障碍服务可以调用 AccessibilityEvent.getTextChangeTypes() 来识别修改的性质,并相应地调整其反馈策略。

ความปลอดภัย

Android 17 มีการปรับปรุงความปลอดภัยของอุปกรณ์และแอปดังนี้

ความปลอดภัยของกิจกรรม

在 Android 17 中,平台继续向“默认安全”架构转变,引入了一系列旨在缓解严重程度较高的漏洞利用(例如网络钓鱼、交互劫持和混淆代理攻击)的增强功能。此更新要求开发者明确选择启用新的安全标准,以保持应用兼容性和用户保护。

对开发者的主要影响包括:

  • BAL 强化和改进的选择启用机制:我们正在通过将保护范围扩展到 IntentSender 来完善后台 activity 启动 (BAL) 限制。 开发者必须弃用旧版 MODE_BACKGROUND_ACTIVITY_START_ALLOWED 常量。相反,您应采用精细的控制措施,例如 MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE,该措施会将 activity 启动限制在调用应用可见的场景中,从而显著减小攻击面。
  • 采用工具:开发者应利用严格模式和更新后的 lint 检查来识别旧版模式,并确保做好准备,以满足未来的目标 SDK 要求。

การป้องกัน localhost

Android 17 ได้เปิดตัวสิทธิ์ใหม่ในเวลาติดตั้ง USE_LOOPBACK_INTERFACE เพื่อปรับปรุงความปลอดภัยของแพลตฟอร์มและความเป็นส่วนตัวของผู้ใช้ การเปลี่ยนแปลงนี้ จำกัดการสื่อสารข้ามแอปและข้ามโปรไฟล์ผ่านอินเทอร์เฟซ Loopback (เช่น 127.0.0.1 หรือ ::1) ซึ่งก่อนหน้านี้ได้รับอนุญาตโดยนัย ด้วยสิทธิ์ INTERNET สำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 ขึ้นไป จะมีกฎต่อไปนี้

  • ต้องได้รับความยินยอมจากทั้ง 2 ฝ่าย: ระบบจะบล็อกการสื่อสารข้ามแอปและข้ามโปรไฟล์โดยค่าเริ่มต้น หากต้องการให้การเชื่อมต่อสำเร็จ ทั้งแอปที่ส่ง และแอปที่รับต้องประกาศสิทธิ์ USE_LOOPBACK_INTERFACE อย่างชัดแจ้งในไฟล์ Manifest
  • การเข้าชมภายในแอปที่ได้รับการยกเว้น: การสื่อสารแบบวนรอบภายในแอปเดียวกัน (การสื่อสารภายในแอป) จะไม่ได้รับผลกระทบและไม่จำเป็นต้องมีสิทธิ์ใหม่นี้
  • ลักษณะการทำงานของ SDK เป้าหมาย:
    • แอปกำหนดเป้าหมายเป็น Android 17 ขึ้นไป: ต้องขอสิทธิ์อย่างชัดเจน หากไม่มีสิทธิ์ดังกล่าว การดำเนินการซ็อกเก็ต (เช่น การเชื่อมต่อ TCP หรือการส่ง UDP) จะล้มเหลว โดยปกติจะแสดงข้อผิดพลาด EPERM (ไม่อนุญาตให้ดำเนินการ)
    • แอปกำหนดเป้าหมายเป็น API ระดับ 36 หรือต่ำกว่า: ระบบจะถือว่าสิทธิ์เป็นสิทธิ์ที่แยกกันใน INTERNET แอปที่กำหนดเป้าหมายเป็น API ระดับต่ำกว่าจะได้รับสิทธิ์นี้โดยอัตโนมัติหากมี INTERNET
  • คำเตือนเรื่องความเข้ากันได้: หากแอปที่รับอัปเดตเป้าหมายเป็น Android 17 แต่ไม่ขอสิทธิ์นี้ การเชื่อมต่อขาเข้าจากแอปอื่นๆ จะถูกปฏิเสธ แม้ว่าแอปที่ส่ง จะกำหนดเป้าหมายเป็นระดับ API ที่ต่ำกว่าก็ตาม

เปิดใช้ CT โดยค่าเริ่มต้น

如果应用以 Android 17 或更高版本为目标平台,则默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)

DCL ดั้งเดิมที่ปลอดภัยยิ่งขึ้น - C

หากแอปกำหนดเป้าหมายเป็น Android 17 ขึ้นไป การปกป้องการโหลดโค้ดแบบไดนามิก (DCL) ที่ปลอดภัยยิ่งขึ้นซึ่งเปิดตัวใน Android 14 สำหรับไฟล์ DEX และ JAR จะขยายไปถึงไลบรารีแบบเนทีฟด้วย

ไฟล์ดั้งเดิมทั้งหมดที่โหลดโดยใช้ System.load() ต้องทำเครื่องหมายเป็นแบบอ่านอย่างเดียว ไม่เช่นนั้น ระบบจะส่ง UnsatisfiedLinkError

เราขอแนะนำให้แอปหลีกเลี่ยงการโหลดโค้ดแบบไดนามิกทุกครั้งที่ทำได้ เนื่องจาก การทำเช่นนี้จะเพิ่มความเสี่ยงอย่างมากที่แอปอาจถูกบุกรุกโดยการแทรกโค้ด หรือการดัดแปลงโค้ด

รูปแบบของอุปกรณ์

Android 17 มีการเปลี่ยนแปลงต่อไปนี้เพื่อปรับปรุงประสบการณ์ของผู้ใช้ ในอุปกรณ์ขนาดและรูปแบบต่างๆ

การเปลี่ยนแปลง API ของแพลตฟอร์มเพื่อไม่สนใจข้อจำกัดด้านการวางแนว ความสามารถในการปรับขนาด และสัดส่วนภาพบนหน้าจอขนาดใหญ่ (sw>=600dp)

เราได้เปิดตัวการเปลี่ยนแปลง Platform API ใน Android 16 เพื่อไม่สนใจข้อจำกัดด้านการวางแนว สัดส่วนภาพ และความสามารถในการปรับขนาดบนหน้าจอขนาดใหญ่ (sw >= 600dp) สำหรับแอปที่กำหนดเป้าหมายเป็น API ระดับ 36 ขึ้นไป นักพัฒนาแอปมีตัวเลือกในการเลือกไม่ใช้การเปลี่ยนแปลงเหล่านี้ด้วย SDK 36 แต่การเลือกไม่ใช้นี้จะไม่มีให้ใช้งานอีกต่อไปสำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 ขึ้นไป

ดูข้อมูลเพิ่มเติมได้ที่ระบบจะเพิกเฉยต่อข้อจำกัดเกี่ยวกับ การวางแนวและการปรับขนาด