การเปลี่ยนแปลงลักษณะการทำงาน: แอปที่กำหนดเป้าหมายเป็น 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 ขึ้นไปซึ่งกำหนดเป้าหมายเป็น Android 17 ขึ้นไปจะเปลี่ยนฟิลด์ static final ไม่ได้ หาก แอปพยายามเปลี่ยนฟิลด์ static final โดยใช้การสะท้อน จะทำให้เกิด IllegalAccessException การพยายามแก้ไขฟิลด์ใดฟิลด์หนึ่งเหล่านี้ ผ่าน JNI API (เช่น SetStaticLongField()) จะทําให้แอปขัดข้อง

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

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

พร้อมทดสอบไหม (บิลด์ที่จำเป็น) ใช่ (Android 17 ขึ้นไป)
ต้องเปลี่ยน targetSDKVersion ไหม (ระดับ API) ใช่ (API ระดับ "CINNAMON_BUN")
ดูข้อมูลเพิ่มเติมเกี่ยวกับค่านี้ได้ในเอกสารประกอบเกี่ยวกับแอตทริบิวต์ของไฟล์ Manifest

Android 17 เปิดตัวสิทธิ์รันไทม์ ACCESS_LOCAL_NETWORK เพื่อปกป้องผู้ใช้จากการเข้าถึงเครือข่ายในเครื่องโดยไม่ได้รับอนุญาต เนื่องจากฟีเจอร์นี้อยู่ภายใต้กลุ่มสิทธิ์ NEARBY_DEVICES ที่มีอยู่ ผู้ใช้ที่ให้สิทธิ์ NEARBY_DEVICES อื่นๆ ไปแล้วจึงไม่ต้องรับข้อความแจ้งอีก ข้อกำหนดใหม่นี้จะป้องกันไม่ให้แอปที่เป็นอันตรายใช้ประโยชน์จากการเข้าถึงเครือข่าย LAN แบบไม่จำกัดเพื่อติดตามผู้ใช้และลายนิ้วมืออย่างลับๆ การประกาศและขอสิทธิ์นี้จะช่วยให้แอปค้นหาและเชื่อมต่อกับอุปกรณ์ในเครือข่ายเฉพาะที่ (LAN) ได้ เช่น อุปกรณ์สมาร์ทโฮมหรือเครื่องรับการแคสต์

ตอนนี้แอปที่กำหนดเป้าหมายเป็น Android 17 ขึ้นไปจะมี 2 เส้นทางในการ รักษาการสื่อสารกับอุปกรณ์ LAN ได้แก่ ใช้ตัวเลือกอุปกรณ์ที่ระบบเป็นตัวกลาง ซึ่งรักษาความเป็นส่วนตัวเพื่อข้ามข้อความแจ้งขอสิทธิ์ หรือขอสิทธิ์ใหม่นี้อย่างชัดเจน ในรันไทม์เพื่อรักษาการสื่อสารในเครือข่าย LAN

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับสิทธิ์เครือข่าย LAN

ความปลอดภัย

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

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

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

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

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

เปิดใช้ 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 ขึ้นไป

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