Android 11 เปิดตัวเครื่องมือใหม่สำหรับนักพัฒนาซอฟต์แวร์เพื่อทดสอบและแก้ไขข้อบกพร่องของแอปตามการเปลี่ยนแปลงลักษณะการทำงานในแพลตฟอร์ม Android เวอร์ชันใหม่ๆ เครื่องมือเหล่านี้เป็นส่วนหนึ่งของเฟรมเวิร์กความเข้ากันได้ที่ช่วยให้นักพัฒนาแอปเปิดและปิดการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบทีละรายการได้โดยใช้ตัวเลือกสำหรับนักพัฒนาแอปหรือ ADB ใช้ความยืดหยุ่นนี้เมื่อเตรียมกำหนดเป้าหมายเป็น API เวอร์ชันเสถียรล่าสุด และเมื่อทดสอบแอปกับเวอร์ชันตัวอย่างของ Android เวอร์ชันถัดไป
เมื่อคุณใช้เครื่องมือเฟรมเวิร์กความเข้ากันได้ แพลตฟอร์ม Android จะปรับตรรกะภายในโดยอัตโนมัติ คุณจึงไม่ต้องเปลี่ยน targetSDKVersion หรือคอมไพล์แอปใหม่เพื่อทำการทดสอบพื้นฐาน เนื่องจากคุณสามารถเปิด/ปิดการเปลี่ยนแปลงแต่ละรายการได้ คุณจึงแยก ทดสอบ และแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานทีละรายการ หรือปิดใช้การเปลี่ยนแปลงรายการเดียวที่ทำให้เกิดปัญหาได้ หากต้องการทดสอบอย่างอื่นก่อน
วิธีระบุการเปลี่ยนแปลงที่เปิดใช้
เมื่อเปิดใช้การเปลี่ยนแปลงลักษณะการทำงาน การเปลี่ยนแปลงดังกล่าวอาจส่งผลต่อวิธีที่แอปเข้าถึง API ของแพลตฟอร์มที่ได้รับผลกระทบจากการเปลี่ยนแปลงนั้น คุณสามารถตรวจสอบการเปลี่ยนแปลงลักษณะการทำงานที่เปิดใช้ได้โดยใช้ตัวเลือกสำหรับนักพัฒนาแอป, logcat หรือคำสั่ง ADB
ระบุการเปลี่ยนแปลงที่เปิดใช้โดยใช้ตัวเลือกสำหรับนักพัฒนาแอป
รูปที่ 1 หน้าจอการเปลี่ยนแปลงความเข้ากันได้ของแอปในตัวเลือกสำหรับนักพัฒนาแอป
คุณสามารถดูว่าการเปลี่ยนแปลงใดเปิดใช้อยู่ และเปิดหรือปิดการเปลี่ยนแปลงเหล่านั้นในตัวเลือกสำหรับนักพัฒนาแอปของอุปกรณ์ หากต้องการเข้าถึงตัวเลือกเหล่านี้ ให้ทำตามขั้นตอนต่อไปนี้
- หากยังไม่ได้เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป ให้เปิดใช้
- เปิดแอปการตั้งค่าของอุปกรณ์ แล้วไปที่ระบบ > ขั้นสูง > ตัวเลือกสำหรับนักพัฒนาแอป > การเปลี่ยนแปลงความเข้ากันได้ของแอป
เลือกแอปจากรายการ
การเปลี่ยนแปลงลักษณะการทำงานแต่ละอย่างมักจะอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งต่อไปนี้
การเปลี่ยนแปลงที่ส่งผลต่อแอปทั้งหมดที่ทำงานบน Android เวอร์ชันนั้น ไม่ว่าแอปจะมี
targetSdkVersionเป็นเวอร์ชันใดก็ตามการเปลี่ยนแปลงเหล่านี้จะเปิดใช้โดยค่าเริ่มต้นในเฟรมเวิร์กความเข้ากันได้ และจะแสดงใน UI ในส่วนการเปลี่ยนแปลงที่เปิดใช้โดยค่าเริ่มต้น
การเปลี่ยนแปลงที่ส่งผลต่อแอปที่กำหนดเป้าหมายเป็น Android บางเวอร์ชันเท่านั้น เนื่องจากการเปลี่ยนแปลงเหล่านี้มีผลกับแอปที่กำหนดเป้าหมายเป็น Android เวอร์ชันที่เฉพาะเจาะจงเท่านั้น จึงเรียกการเปลี่ยนแปลงเหล่านี้ว่าถูกจำกัดโดย
targetSDKVersionด้วยระบบจะเปิดใช้การเปลี่ยนแปลงเหล่านี้โดยค่าเริ่มต้นในเฟรมเวิร์กความเข้ากันได้หากแอปของคุณกำหนดเป้าหมายเป็นเวอร์ชันที่สูงกว่าเวอร์ชัน API ที่ระบุไว้ ตัวอย่างเช่น การเปลี่ยนแปลงลักษณะการทำงานที่ควบคุมโดย
targetSDKVersionใน Android 13 (ระดับ API 33) จะแสดงในส่วน UI ที่มีชื่อว่าเปิดใช้สำหรับ targetSdkVersion >=33 ใน Android เวอร์ชันที่ต่ำกว่าบางเวอร์ชัน ส่วนนี้จะมีชื่อว่า "เปิดใช้หลังจาก SDK API_LEVEL" แทน
นอกจากนี้ คุณจะเห็นส่วนในรูปที่ 1 ที่ชื่อว่าการเปลี่ยนแปลงที่ปิดใช้โดยค่าเริ่มต้น การเปลี่ยนแปลงที่อยู่ในส่วนนี้มีวัตถุประสงค์ที่หลากหลาย ก่อนเปิดใช้การเปลี่ยนแปลงเหล่านี้ โปรดอ่านคำอธิบายการเปลี่ยนแปลงในรายการเฟรมเวิร์กความเข้ากันได้สำหรับ Android เวอร์ชันนั้น
ระบุการเปลี่ยนแปลงที่เปิดใช้โดยใช้ logcat
สำหรับการเปลี่ยนแปลงลักษณะการทำงานแต่ละรายการ ครั้งแรกในระหว่างกระบวนการของแอปเมื่อแอปเรียก API ที่ได้รับผลกระทบ ระบบจะแสดงข้อความ Logcat ดังนี้
D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED
ข้อความ logcat แต่ละรายการจะมีข้อมูลต่อไปนี้
- แก้ไขรหัส
- ระบุการเปลี่ยนแปลงที่ส่งผลต่อแอป ค่านี้จะแมปกับการเปลี่ยนแปลงลักษณะการทำงานรายการใดรายการหนึ่งที่แสดงในหน้าจอการเปลี่ยนแปลงความเข้ากันได้ของแอป (ดูรูปที่ 1) ในตัวอย่างนี้
194833441จะแมปกับNOTIFICATION_PERM_CHANGE_ID - UID
- ระบุแอปที่ได้รับผลกระทบจากการเปลี่ยนแปลง
- รัฐ
ระบุว่าการเปลี่ยนแปลงส่งผลต่อแอปหรือไม่
สถานะอาจเป็นค่าใดค่าหนึ่งต่อไปนี้
รัฐ ความหมาย ENABLEDการเปลี่ยนแปลงเปิดใช้อยู่และจะส่งผลต่อลักษณะการทำงานของแอปหากแอปใช้ API ที่มีการเปลี่ยนแปลง DISABLEDการเปลี่ยนแปลงถูกปิดใช้และจะไม่ส่งผลต่อแอป
หมายเหตุ: หากการเปลี่ยนแปลงนี้ถูกปิดใช้เนื่องจาก
targetSDKVersionของแอปต่ำกว่าเกณฑ์ที่กำหนด ระบบจะเปิดใช้การเปลี่ยนแปลงโดยค่าเริ่มต้นเมื่อแอปเพิ่มtargetSDKVersionเพื่อกำหนดเป้าหมายเป็นเวอร์ชันที่สูงขึ้นLOGGEDระบบกำลังบันทึกการเปลี่ยนแปลงผ่านเฟรมเวิร์กความเข้ากันได้ แต่ไม่สามารถเปิดหรือปิดได้ แม้ว่าการเปลี่ยนแปลงนี้จะเปิดหรือปิดไม่ได้ แต่ก็อาจยังส่งผลต่อลักษณะการทำงานของแอป ดูคำอธิบายการเปลี่ยนแปลงในรายการเฟรมเวิร์กความเข้ากันได้สำหรับ Android เวอร์ชันนั้นเพื่อดูข้อมูลเพิ่มเติม ในหลายกรณี การเปลี่ยนแปลงประเภทนี้เป็นการทดสอบและสามารถละเว้นได้
ระบุการเปลี่ยนแปลงที่เปิดใช้โดยใช้ ADB
เรียกใช้คำสั่ง ADB ต่อไปนี้เพื่อดูชุดการเปลี่ยนแปลงทั้งหมด (ทั้งที่เปิดใช้และปิดใช้) ในอุปกรณ์ทั้งหมด
adb shell dumpsys platform_compat
เอาต์พุตจะแสดงข้อมูลต่อไปนี้สำหรับการเปลี่ยนแปลงแต่ละรายการ
- แก้ไขรหัส
- ตัวระบุที่ไม่ซ้ำกันสำหรับการเปลี่ยนแปลงลักษณะการทำงานนี้ เช่น
194833441 - ชื่อ
- ชื่อของการเปลี่ยนแปลงลักษณะการทำงานนี้ เช่น
NOTIFICATION_PERM_CHANGE_ID - เกณฑ์ targetSDKVersion
targetSDKVersionที่ควบคุมการเปลี่ยนแปลง (หากมี)ตัวอย่างเช่น หากการเปลี่ยนแปลงนี้เปิดใช้สำหรับแอปที่กำหนดเป้าหมายเป็น SDK เวอร์ชัน 33 ขึ้นไปเท่านั้น ระบบจะแสดงผล
enableAfterTargetSdk=32หากการเปลี่ยนแปลงไม่ได้ถูกกำหนดโดยtargetSDKVersionระบบจะแสดงผลenableAfterTargetSdk=0- การลบล้างแพ็กเกจ
ชื่อของแต่ละแพ็กเกจที่มีการลบล้างสถานะเริ่มต้นของการเปลี่ยนแปลง (เปิดใช้หรือปิดใช้)
ตัวอย่างเช่น หากการเปลี่ยนแปลงนี้เปิดใช้โดยค่าเริ่มต้น ชื่อแพ็กเกจของแอปจะแสดงขึ้นหากคุณปิดการเปลี่ยนแปลงโดยใช้ตัวเลือกสำหรับนักพัฒนาแอปหรือ ADB ในกรณีนี้ เอาต์พุตจะเป็นดังนี้
packageOverrides={com.my.package=false}การเปลี่ยนแปลงที่ควบคุมโดย
targetSDKVersionสามารถเปิดหรือปิดใช้โดยค่าเริ่มต้นได้ ดังนั้นรายการแพ็กเกจจึงอาจรวมอินสแตนซ์ของทั้งtrueหรือfalseโดยขึ้นอยู่กับtargetSDKVersionของแต่ละแอป เช่นpackageOverrides={com.my.package=true, com.another.package=false}
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงที่เฉพาะเจาะจง
รายการการเปลี่ยนแปลงลักษณะการทำงานทั้งหมดในเฟรมเวิร์กความเข้ากันได้จะรวมอยู่ในเอกสารประกอบของ Android แต่ละเวอร์ชัน ดูข้อมูลเพิ่มเติมได้ที่ลิงก์ต่อไปนี้ โดยขึ้นอยู่กับเวอร์ชัน Android ที่คุณใช้ทดสอบแอป
- Android 16 (ระดับ API 36)
- Android 15 (ระดับ API 35)
- Android 14 (ระดับ API 34)
- Android 13 (ระดับ API 33)
- Android 12 (ระดับ API 31 และ 32)
- Android 11 (ระดับ API 30)
กรณีที่ควรสลับการเปลี่ยนแปลง
วัตถุประสงค์หลักของเฟรมเวิร์กความเข้ากันได้คือช่วยให้คุณควบคุมและมีความยืดหยุ่นขณะทดสอบแอปกับ Android เวอร์ชันใหม่ๆ ส่วนนี้จะอธิบายกลยุทธ์บางอย่างที่คุณใช้ได้เพื่อพิจารณาว่าจะเปิดหรือปิดการเปลี่ยนแปลงเมื่อใดขณะทดสอบและแก้ไขข้อบกพร่องของแอป
เมื่อใดที่ควรปิดใช้การเปลี่ยนแปลง
การตัดสินใจว่าจะปิดการเปลี่ยนแปลงเมื่อใดมักขึ้นอยู่กับว่าการเปลี่ยนแปลงนั้นถูกควบคุมโดย targetSDKVersion หรือไม่
- เปิดใช้การเปลี่ยนแปลงสำหรับแอปทั้งหมดแล้ว
การเปลี่ยนแปลงที่ส่งผลต่อแอปทั้งหมดจะเปิดใช้โดยค่าเริ่มต้นสำหรับเวอร์ชันแพลตฟอร์มที่เฉพาะเจาะจง ไม่ว่าแอปของคุณจะมี
targetSDKVersionเป็นอะไรก็ตาม คุณจึงดูได้ว่าแอปได้รับผลกระทบหรือไม่โดยการเรียกใช้แอปในแพลตฟอร์มเวอร์ชันนั้นตัวอย่างเช่น หากคุณกำลังเตรียมกำหนดเป้าหมายเป็น Android 16 (ระดับ API 36) คุณสามารถติดตั้งแอปในอุปกรณ์ที่ใช้ Android 16 และทดสอบแอปโดยใช้เวิร์กโฟลว์การทดสอบตามปกติ หากแอปพบปัญหา คุณสามารถปิดใช้การเปลี่ยนแปลงที่ทำให้เกิดปัญหาและทดสอบปัญหาอื่นๆ ต่อไปได้
การเปลี่ยนแปลงเหล่านี้อาจส่งผลต่อแอปทั้งหมด ไม่ว่าจะเป็น
targetSDKVersion, ดังนั้นโปรดทดสอบและอัปเดตแอปสำหรับการเปลี่ยนแปลงเหล่านี้ก่อนการเปลี่ยนแปลง ที่กำหนดโดยtargetSDKVersionซึ่งจะช่วยให้มั่นใจได้ว่าประสบการณ์ของผู้ใช้จะไม่ลดลงเมื่ออัปเดตเป็นแพลตฟอร์มเวอร์ชันใหม่นอกจากนี้ คุณควรให้ความสำคัญกับการทดสอบการเปลี่ยนแปลงเหล่านี้ด้วย เนื่องจากคุณไม่สามารถปิดการเปลี่ยนแปลงเหล่านี้ได้เมื่อใช้บิลด์ที่เผยแพร่แบบสาธารณะของ Android คุณควรทดสอบการเปลี่ยนแปลงเหล่านี้ใน Android แต่ละเวอร์ชันขณะที่เวอร์ชันนั้นอยู่ในเวอร์ชันตัวอย่าง
- การเปลี่ยนแปลงที่ควบคุมโดย
targetSDKVersion หากแอปของคุณกำหนดเป้าหมายเป็น
targetSDKVersionที่เฉพาะเจาะจง การเปลี่ยนแปลงใดๆ ที่ถูกจำกัดโดยเวอร์ชันนั้นจะเปิดใช้โดยค่าเริ่มต้น ดังนั้นเมื่อคุณเปลี่ยนtargetSDKVersionของแอปเป็นเวอร์ชันใหม่ แอปจะเริ่มได้รับผลกระทบจากการเปลี่ยนแปลงใหม่ๆ หลายอย่างพร้อมกันเนื่องจากแอปของคุณอาจได้รับผลกระทบจากการเปลี่ยนแปลงเหล่านี้มากกว่า 1 รายการ คุณจึงอาจต้องปิดการเปลี่ยนแปลงบางรายการทีละรายการขณะทดสอบและแก้ไขข้อบกพร่องของแอป
เวลาที่ต้องการเปิดใช้การเปลี่ยนแปลง
การเปลี่ยนแปลงที่ควบคุมโดย targetSDKVersion ที่เฉพาะเจาะจงจะปิดใช้โดยค่าเริ่มต้นเมื่อใดก็ตามที่แอปกำหนดเป้าหมาย SDK เวอร์ชันต่ำกว่าเวอร์ชันที่ควบคุม
โดยปกติแล้ว เมื่อเตรียมพร้อมที่จะกำหนดเป้าหมายเป็น targetSdkVersion ใหม่ คุณจะมีรายการการเปลี่ยนแปลงลักษณะการทำงานที่ต้องทดสอบและแก้ไขข้อบกพร่องในแอป
เช่น คุณอาจกำลังทดสอบแอปกับการเปลี่ยนแปลงแพลตฟอร์มหลายรายการใน targetSdkVersion ถัดไป เมื่อใช้ตัวเลือกสำหรับนักพัฒนาแอปหรือคำสั่ง ADB คุณจะเปิดใช้และทดสอบการเปลี่ยนแปลงที่มีการควบคุมแต่ละรายการทีละรายการได้ แทนที่จะเปลี่ยนไฟล์ Manifest ของแอปและเลือกใช้การเปลี่ยนแปลงทั้งหมดพร้อมกัน
การควบคุมเพิ่มเติมนี้จะช่วยให้คุณทดสอบการเปลี่ยนแปลงแยกต่างหากได้ และหลีกเลี่ยงการแก้ไขข้อบกพร่องและการอัปเดตแอปหลายส่วนพร้อมกัน
หลังจากเปิดใช้การเปลี่ยนแปลงแล้ว คุณจะทดสอบและแก้ไขข้อบกพร่องของแอปได้โดยใช้เวิร์กโฟลว์การทดสอบตามปกติ หากพบปัญหา ให้ตรวจสอบบันทึกเพื่อช่วยระบุสาเหตุของปัญหา หากไม่แน่ใจว่าปัญหาเกิดจากการเปลี่ยนแปลงแพลตฟอร์มที่เปิดใช้หรือไม่ ให้ลองปิดใช้การเปลี่ยนแปลงนั้น แล้วทดสอบส่วนนั้นของแอปอีกครั้ง
สลับเปิดหรือปิดการเปลี่ยนแปลง
เฟรมเวิร์กความเข้ากันได้ช่วยให้คุณเปิดหรือปิดการเปลี่ยนแปลงแต่ละรายการได้โดยใช้ตัวเลือกสำหรับนักพัฒนาแอปหรือคำสั่ง ADB เนื่องจากการเปิดหรือปิดการเปลี่ยนแปลงอาจทำให้แอปขัดข้องหรือปิดใช้การเปลี่ยนแปลงด้านความปลอดภัยที่สำคัญ จึงมีข้อจำกัดบางประการเกี่ยวกับเวลาที่คุณสามารถเปิดหรือปิดการเปลี่ยนแปลง
สลับการเปลี่ยนแปลงโดยใช้ตัวเลือกสำหรับนักพัฒนาแอป
ใช้ตัวเลือกสำหรับนักพัฒนาแอปเพื่อเปิดหรือปิดการเปลี่ยนแปลง หากต้องการค้นหาตัวเลือกสำหรับนักพัฒนาแอป ให้ทำตามขั้นตอนต่อไปนี้
- หากยังไม่ได้เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป ให้เปิดใช้
- เปิดแอปการตั้งค่าของอุปกรณ์ แล้วไปที่ระบบ > ขั้นสูง > ตัวเลือกสำหรับนักพัฒนาแอป > การเปลี่ยนแปลงความเข้ากันได้ของแอป
- เลือกแอปจากรายการ
- จากรายการการเปลี่ยนแปลง ให้ค้นหาการเปลี่ยนแปลงที่ต้องการเปิดหรือปิด แล้วแตะสวิตช์
เปิด/ปิดการเปลี่ยนแปลงโดยใช้ ADB
หากต้องการเปิดหรือปิดการเปลี่ยนแปลงโดยใช้ ADB ให้เรียกใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้
adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAMEadb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
ส่ง CHANGE_ID (เช่น 194833441) หรือ CHANGE_NAME (เช่น NOTIFICATION_PERM_CHANGE_ID) และ PACKAGE_NAME ของแอป
นอกจากนี้ คุณยังใช้คําสั่งต่อไปนี้เพื่อรีเซ็ตการเปลี่ยนแปลงกลับเป็นสถานะเริ่มต้นได้ด้วย ซึ่งจะเป็นการนําการลบล้างที่คุณตั้งค่าไว้โดยใช้ ADB หรือตัวเลือกสําหรับนักพัฒนาแอปออก
adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
ข้อจำกัดในการสลับการเปลี่ยนแปลง
โดยค่าเริ่มต้น การเปลี่ยนแปลงลักษณะการทำงานแต่ละรายการจะเปิดหรือปิดใช้อยู่ การเปลี่ยนแปลงที่ส่งผลต่อแอปทั้งหมดจะเปิดใช้โดยค่าเริ่มต้น การเปลี่ยนแปลงอื่นๆ จะถูกจำกัดโดย targetSdkVersion การเปลี่ยนแปลงเหล่านี้จะเปิดใช้โดยค่าเริ่มต้นเมื่อแอปกำหนดเป้าหมายเป็น SDK เวอร์ชันที่เกี่ยวข้องหรือสูงกว่า และจะปิดใช้โดยค่าเริ่มต้นเมื่อแอปกำหนดเป้าหมายเป็น SDK เวอร์ชันที่ต่ำกว่าเวอร์ชันที่กำหนดไว้ เมื่อเปิดหรือปิดการเปลี่ยนแปลง คุณจะลบล้างสถานะเริ่มต้นของการเปลี่ยนแปลงนั้น
เพื่อป้องกันไม่ให้มีการใช้เฟรมเวิร์กความเข้ากันได้ในทางที่เป็นอันตราย จึงมีข้อจำกัดบางประการเกี่ยวกับเวลาที่คุณสามารถสลับการเปลี่ยนแปลงได้ คุณจะเปิด/ปิดการเปลี่ยนแปลงได้หรือไม่นั้นขึ้นอยู่กับประเภทการเปลี่ยนแปลง แอปของคุณแก้ไขข้อบกพร่องได้หรือไม่ และประเภทบิลด์ที่ทำงานในอุปกรณ์ ตารางต่อไปนี้อธิบายกรณีที่คุณได้รับอนุญาตให้สลับการเปลี่ยนแปลงประเภทต่างๆ
| ประเภทบิวด์ | แอปที่แก้ไขข้อบกพร่องไม่ได้ | แอปที่แก้ไขข้อบกพร่องได้ | |
|---|---|---|---|
| การเปลี่ยนแปลงทั้งหมด | การเปลี่ยนแปลงที่กำหนดโดย targetSDKVersion | การเปลี่ยนแปลงอื่นๆ ทั้งหมด | |
| เวอร์ชันตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์หรือบิลด์เบต้า | สลับไม่ได้ | เปิด/ปิดได้ | เปิด/ปิดได้ |
| บิลด์ผู้ใช้สาธารณะ | สลับไม่ได้ | เปิด/ปิดได้ | สลับไม่ได้ |