เช่นเดียวกับรุ่นก่อนๆ 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 ขึ้นไป: ต้องขอสิทธิ์อย่างชัดเจน หากไม่มีสิทธิ์ดังกล่าว การดำเนินการซ็อกเก็ต (เช่น การเชื่อมต่อ TCP หรือการส่ง UDP) จะล้มเหลว โดยปกติจะแสดงข้อผิดพลาด
- คำเตือนเรื่องความเข้ากันได้: หากแอปที่รับอัปเดตเป้าหมายเป็น 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 ขึ้นไป
ดูข้อมูลเพิ่มเติมได้ที่ระบบจะเพิกเฉยต่อข้อจำกัดเกี่ยวกับ การวางแนวและการปรับขนาด