การเปลี่ยนแปลงลักษณะการทำงาน: แอปที่กำหนดเป้าหมายเป็น 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 ที่ซับซ้อน

ฟีเจอร์นี้เปิดตัว API ใหม่ AccessibilityEvent และ TextAttribute เพื่อปรับปรุงการอธิบายและอ่านออกเสียงของโปรแกรมอ่านหน้าจอสำหรับการป้อนข้อมูลภาษา CJKV ตอนนี้แอป CJKV IME สามารถส่งสัญญาณได้ว่ามีการเลือกข้อความที่แนะนำให้แปลงหรือไม่ในระหว่าง การเขียนข้อความ แอปที่มีช่องแก้ไขสามารถระบุประเภทการเปลี่ยนแปลงข้อความเมื่อ ส่งเหตุการณ์การช่วยเหลือพิเศษที่ข้อความมีการเปลี่ยนแปลง เช่น แอปสามารถระบุว่าการเปลี่ยนแปลงข้อความเกิดขึ้นระหว่างการเขียนข้อความ หรือการเปลี่ยนแปลงข้อความเกิดจากการคอมมิต การดำเนินการนี้จะช่วยให้บริการการช่วยเหลือพิเศษ เช่น โปรแกรมอ่านหน้าจอ ให้ความคิดเห็นที่แม่นยำยิ่งขึ้นตาม ลักษณะของการแก้ไขข้อความ

การรับแอปไปใช้งาน

  • แอป IME: เมื่อตั้งค่าการเขียนข้อความในช่องแก้ไข IME จะใช้ TextAttribute.Builder.setTextSuggestionSelected() เพื่อระบุว่ามีการเลือก ตัวเลือก Conversion ที่เฉพาะเจาะจงหรือไม่

  • แอปที่มีช่องแก้ไข: แอปที่ดูแลรักษา InputConnection ที่กำหนดเองจะ เรียกข้อมูลการเลือกผู้สมัครได้โดยการเรียกใช้ TextAttribute.isTextSuggestionSelected() จากนั้นแอปเหล่านี้ควรเรียกใช้ AccessibilityEvent.setTextChangeTypes() เมื่อส่ง TYPE_VIEW_TEXT_CHANGEDเหตุการณ์ แอปที่กำหนดเป้าหมายเป็น Android 17 ซึ่งใช้ TextView มาตรฐานจะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น (กล่าวคือ TextView จะจัดการการดึงข้อมูลจาก IME และการตั้งค่าประเภทการเปลี่ยนแปลงข้อความเมื่อส่งเหตุการณ์ไปยังบริการช่วยเหลือพิเศษ)

  • บริการช่วยเหลือพิเศษ: บริการช่วยเหลือพิเศษที่ประมวลผลเหตุการณ์ TYPE_VIEW_TEXT_CHANGED สามารถเรียกใช้ AccessibilityEvent.getTextChangeTypes() เพื่อระบุลักษณะของการแก้ไขและปรับกลยุทธ์ความคิดเห็นตามนั้น

ความปลอดภัย

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

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

ใน Android 17 แพลตฟอร์มยังคงเปลี่ยนไปใช้สถาปัตยกรรม "ปลอดภัยโดยค่าเริ่มต้น" พร้อมเปิดตัวชุดการปรับปรุงที่ออกแบบมาเพื่อลดช่องโหว่ที่มีความรุนแรงสูง เช่น ฟิชชิง การลักลอบใช้การโต้ตอบ และการโจมตีแบบ Confused Deputy การอัปเดตนี้กำหนดให้นักพัฒนาแอปต้องเลือกใช้ มาตรฐานความปลอดภัยใหม่โดยชัดแจ้งเพื่อรักษาความเข้ากันได้ของแอปและการปกป้องผู้ใช้

ผลกระทบที่สำคัญสำหรับนักพัฒนาแอปมีดังนี้

  • การเพิ่มความแข็งแกร่งของ BAL และการเลือกใช้ที่ปรับปรุงแล้ว: เรากำลังปรับแต่งข้อจำกัดการเปิดใช้กิจกรรมในเบื้องหลัง (BAL) โดยขยายการปกป้องไปยัง IntentSender นักพัฒนาแอปต้องย้ายข้อมูลออกจากค่าคงที่ MODE_BACKGROUND_ACTIVITY_START_ALLOWED รุ่นเดิม แต่คุณควร ใช้การควบคุมแบบละเอียด เช่น MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE ซึ่งจำกัด การเริ่มต้นกิจกรรมไว้ในสถานการณ์ที่แอปโทรปรากฏให้เห็น ซึ่งจะช่วย ลดพื้นผิวการโจมตีได้อย่างมาก
  • เครื่องมือในการนำไปใช้: นักพัฒนาแอปควรใช้โหมดเข้มงวดและ 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 ขึ้นไป

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