เช่นเดียวกับรุ่นก่อนๆ 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 แพลตฟอร์มยังคงเปลี่ยนไปใช้สถาปัตยกรรม "ปลอดภัยโดยค่าเริ่มต้น" พร้อมเปิดตัวชุดการปรับปรุงที่ออกแบบมาเพื่อลดช่องโหว่ที่มีความรุนแรงสูง เช่น ฟิชชิง การลักลอบใช้การโต้ตอบ และการโจมตีแบบ 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 ขึ้นไป
ดูข้อมูลเพิ่มเติมได้ที่ระบบจะเพิกเฉยต่อข้อจำกัดเกี่ยวกับ การวางแนวและการปรับขนาด