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_NAME
adb 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 | การเปลี่ยนแปลงอื่นๆ ทั้งหมด | |
บิลด์เวอร์ชันตัวอย่างสำหรับนักพัฒนาแอปหรือเวอร์ชันเบต้า | สลับไม่ได้ | เปิด/ปิดได้ | เปิด/ปิดได้ |
บิลด์สำหรับผู้ใช้ทั่วไป | สลับไม่ได้ | เปิด/ปิดได้ | สลับไม่ได้ |