การเปลี่ยนแปลงลักษณะการทํางาน: แอปทั้งหมด

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

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

ความปลอดภัย

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

แผนการเลิกใช้งาน usesClearTraffic

เราวางแผนที่จะเลิกใช้งานองค์ประกอบ usesCleartextTraffic ในรุ่นต่อๆ ไป แอปที่ต้องทำการเชื่อมต่อที่ไม่ได้เข้ารหัส (HTTP) ควรย้ายข้อมูลไปใช้ไฟล์การกำหนดค่าความปลอดภัยของเครือข่าย ซึ่งช่วยให้คุณระบุโดเมนที่แอปต้องทำการเชื่อมต่อแบบข้อความธรรมดาได้

โปรดทราบว่าไฟล์การกำหนดค่าความปลอดภัยของเครือข่ายใช้ได้ใน API ระดับ 24 ขึ้นไปเท่านั้น หากแอปมีระดับ API ขั้นต่ำต่ำกว่า 24 คุณควรทำทั้ง 2 อย่างต่อไปนี้

  • ตั้งค่าแอตทริบิวต์ usesCleartextTraffic เป็น true
  • ใช้ไฟล์การกำหนดค่าเครือข่าย

หากระดับ API ขั้นต่ำของแอปคือ 24 ขึ้นไป คุณจะใช้ไฟล์การกำหนดค่าเครือข่ายได้และไม่จำเป็นต้องตั้งค่า usesCleartextTraffic

จำกัดการให้สิทธิ์ URI โดยนัย

ปัจจุบันหากแอปเปิด Intent ด้วย URI ที่มีการดำเนินการ Send, SendMultiple หรือ ImageCapture ระบบจะให้สิทธิ์ URI ในการอ่านและเขียนแก่แอปเป้าหมายโดยอัตโนมัติ เราวางแผนที่จะเปลี่ยนลักษณะการทำงานนี้ใน Android 18 ด้วยเหตุนี้ เราจึงขอแนะนำให้แอปให้สิทธิ์ URI ที่เกี่ยวข้องอย่างชัดเจน แทนที่จะพึ่งพาระบบในการให้สิทธิ์

การจำกัดคลังเก็บคีย์ต่อแอป

แอปควรหลีกเลี่ยงการสร้างคีย์จำนวนมากเกินไปใน Android Keystore เนื่องจากเป็นทรัพยากรที่แชร์สำหรับแอปทั้งหมดในอุปกรณ์ ตั้งแต่ Android 17 เป็นต้นไป ระบบจะบังคับใช้ขีดจํากัดจํานวนคีย์ที่แอปเป็นเจ้าของได้ โดยจำกัดไว้ที่ 50,000 คีย์สำหรับแอปที่ไม่ใช่ระบบที่กำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไป และ 200,000 คีย์สำหรับแอปอื่นๆ ทั้งหมด แอปของระบบมีขีดจำกัดคีย์อยู่ที่ 200,000 คีย์ ไม่ว่าแอปจะกำหนดเป้าหมายเป็นระดับ API ใดก็ตาม

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

  • แอปที่กำหนดเป้าหมายเป็น Android 17 (API ระดับ 37) ขึ้นไป getNumericErrorCode() จะแสดงค่า ERROR_TOO_MANY_KEYS ใหม่
  • แอปอื่นๆ ทั้งหมด: getNumericErrorCode() คืนค่า ERROR_INCORRECT_USAGE

ประสบการณ์ของผู้ใช้และ UI ของระบบ

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

การคืนค่าการแสดงผล IME เริ่มต้นหลังจากการหมุน

ตั้งแต่ Android 17 เป็นต้นไป เมื่อการกำหนดค่าของอุปกรณ์เปลี่ยนแปลง (เช่น ผ่านการหมุน) และแอปไม่ได้จัดการการเปลี่ยนแปลงนี้ ระบบจะไม่คืนค่าระดับการมองเห็น IME ก่อนหน้า

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

  • ตั้งค่าแอตทริบิวต์ android:windowSoftInputMode เป็น stateAlwaysVisible
  • ขอแป้นพิมพ์เสมือนในกิจกรรมของคุณโดยใช้โปรแกรมในเมธอด onCreate() หรือเพิ่มเมธอด onConfigurationChanged()

อินพุตจากมนุษย์

Android 17 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งส่งผลต่อวิธีที่แอปโต้ตอบกับอุปกรณ์อินพุตจากมนุษย์ เช่น แป้นพิมพ์และทัชแพด

ทัชแพดจะส่งเหตุการณ์สัมพัทธ์โดยค่าเริ่มต้นระหว่างการจับตัวชี้

ตั้งแต่ Android 17 เป็นต้นไป หากแอปขอการจับเคอร์เซอร์โดยใช้ View.requestPointerCapture() และผู้ใช้ใช้ทัชแพด ระบบจะ จดจำการเคลื่อนที่ของเคอร์เซอร์และท่าทางการเลื่อนจากการสัมผัสของผู้ใช้ และรายงานไปยังแอปในลักษณะเดียวกับการเคลื่อนที่ของเคอร์เซอร์และล้อเลื่อน จากเมาส์ที่จับภาพ ในกรณีส่วนใหญ่ การดำเนินการนี้จะช่วยให้แอปที่ รองรับเมาส์ที่จับได้ไม่จำเป็นต้องเพิ่มตรรกะการจัดการพิเศษสำหรับทัชแพด ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบสำหรับ View.POINTER_CAPTURE_MODE_RELATIVE

ก่อนหน้านี้ ระบบไม่ได้พยายามจดจำท่าทางสัมผัสจากทัชแพด แต่จะส่งตำแหน่งนิ้วสัมผัสแบบสัมบูรณ์ดิบไปยังแอปในรูปแบบที่คล้ายกับ การสัมผัสหน้าจอสัมผัส หากแอปยังคงต้องการข้อมูลที่แน่นอนนี้ แอป ควรเรียกใช้เมธอด View.requestPointerCapture(int) ใหม่ด้วย View.POINTER_CAPTURE_MODE_ABSOLUTE แทน

สื่อ

Android 17 มีการเปลี่ยนแปลงลักษณะการทำงานของสื่อดังต่อไปนี้

การปิดช่องโหว่ของเสียงในเบื้องหลัง

ตั้งแต่ Android 17 เป็นต้นไป เฟรมเวิร์กเสียงจะบังคับใช้ข้อจำกัดในการโต้ตอบเสียงในเบื้องหลัง ซึ่งรวมถึงการเล่นเสียง คำขอโฟกัสเสียง และ API การเปลี่ยนระดับเสียง เพื่อให้มั่นใจว่าผู้ใช้เป็นผู้เริ่มการเปลี่ยนแปลงเหล่านี้โดยเจตนา

หากแอปพยายามเรียกใช้ Audio API ขณะที่แอปไม่ได้อยู่ในวงจรที่ถูกต้อง API การเล่นเสียงและการเปลี่ยนระดับเสียงจะทำงานไม่สำเร็จโดยไม่มีการแจ้งเตือน ข้อยกเว้นหรือแสดงข้อความว่าไม่สำเร็จ API โฟกัสเสียงล้มเหลวโดยมีรหัสผลลัพธ์ AUDIOFOCUS_REQUEST_FAILED

ดูข้อมูลเพิ่มเติม รวมถึงกลยุทธ์การลดความเสี่ยงได้ที่การเพิ่มความปลอดภัยของเสียงในเบื้องหลัง

การเชื่อมต่อ

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

การจับคู่ใหม่โดยอัตโนมัติเมื่อการเชื่อมต่อบลูทูธขาดหายไป

Android 17 เปิดตัวการจับคู่ใหม่โดยอัตโนมัติ ซึ่งเป็นการเพิ่มประสิทธิภาพระดับระบบ ที่ออกแบบมาเพื่อแก้ไขการสูญเสียการเชื่อมต่อบลูทูธโดยอัตโนมัติ

ก่อนหน้านี้ หากการเชื่อมต่อขาดหายไป ผู้ใช้ต้องไปที่การตั้งค่าด้วยตนเองเพื่อ เลิกจับคู่ แล้วจับคู่กับอุปกรณ์ต่อพ่วงอีกครั้ง ฟีเจอร์นี้สร้างขึ้นจากการปรับปรุงความปลอดภัยของ Android 16 โดยอนุญาตให้ระบบสร้างการเชื่อมต่อใหม่ในเบื้องหลังโดยไม่ต้องให้ผู้ใช้ไปที่การตั้งค่าด้วยตนเองเพื่อยกเลิกการจับคู่และจับคู่กับอุปกรณ์ต่อพ่วงอีกครั้ง

แม้ว่าแอปส่วนใหญ่จะไม่ต้องมีการเปลี่ยนแปลงโค้ด แต่ผู้พัฒนาควรทราบถึง การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้ในสแต็ก Bluetooth

  • บริบทการจับคู่ใหม่: ตอนนี้ ACTION_PAIRING_REQUEST มีEXTRA_PAIRING_CONTEXT เพิ่มเติมซึ่งช่วยให้แอปแยกความแตกต่างระหว่างคำขอจับคู่มาตรฐานกับความพยายามในการจับคู่ซ้ำที่ระบบอัตโนมัติเริ่มต้นได้
  • การอัปเดตคีย์แบบมีเงื่อนไข: ระบบจะแทนที่คีย์ความปลอดภัยที่มีอยู่ก็ต่อเมื่อ การจับคู่ใหม่สำเร็จและการเชื่อมต่อใหม่มีระดับความปลอดภัยเท่ากับหรือสูงกว่า ระดับความปลอดภัยของการเชื่อมต่อก่อนหน้า
  • เวลาของ Intent ที่แก้ไข: ตอนนี้ Intent ACTION_KEY_MISSING จะ ออกอากาศก็ต่อเมื่อการพยายามจับคู่ใหม่โดยอัตโนมัติไม่สำเร็จเท่านั้น ซึ่งจะช่วยลดการจัดการข้อผิดพลาดที่ไม่จำเป็นในแอป หากระบบกู้คืน การเชื่อมต่อในเบื้องหลังได้สำเร็จ
  • การแจ้งเตือนผู้ใช้: ระบบจะจัดการการจับคู่ใหม่ผ่านการแจ้งเตือนและกล่องโต้ตอบ UI ใหม่ ระบบจะแจ้งให้ผู้ใช้ยืนยันการพยายามจับคู่อีกครั้งเพื่อให้แน่ใจว่าผู้ใช้ทราบถึงการเชื่อมต่ออีกครั้ง

ผู้ผลิตอุปกรณ์ต่อพ่วงและนักพัฒนาแอปคู่ควรตรวจสอบว่า ฮาร์ดแวร์และแอปจัดการการเปลี่ยนการเชื่อมต่อได้อย่างราบรื่น หากต้องการทดสอบลักษณะการทำงานนี้ ให้จำลองการสูญเสียการเชื่อมต่อระยะไกลโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

  • นำข้อมูลการจับคู่ออกจากอุปกรณ์ต่อพ่วงด้วยตนเอง
  • ยกเลิกการจับคู่อุปกรณ์ด้วยตนเองโดยไปที่การตั้งค่า > อุปกรณ์ที่เชื่อมต่อ