แพลตฟอร์ม 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 ขึ้นไป และ 200,000 คีย์สำหรับแอปอื่นๆ ทั้งหมด แอปของระบบมีขีดจำกัดคีย์ 200,000 รายการ ไม่ว่าแอปจะกำหนดเป้าหมายเป็น API ระดับใดก็ตาม
หากแอปพยายามสร้างคีย์เกินขีดจำกัด การสร้างจะไม่สำเร็จและแสดงข้อผิดพลาด KeyStoreException สตริงข้อความของข้อยกเว้นมีข้อมูลเกี่ยวกับขีดจำกัดของคีย์
หากแอปเรียกใช้ getNumericErrorCode() ใน
ข้อยกเว้น ค่าที่ส่งคืนจะขึ้นอยู่กับระดับ API ที่แอปกำหนดเป้าหมาย
- แอปที่กำหนดเป้าหมายเป็น Android 17 ขึ้นไป
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
ดูข้อมูลเพิ่มเติม รวมถึงกลยุทธ์การลดความเสี่ยงได้ที่การเพิ่มความปลอดภัยของเสียงในเบื้องหลัง