เครื่องมือเฟรมเวิร์กที่เข้ากันได้

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

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

วิธีระบุการเปลี่ยนแปลงที่เปิดใช้

เมื่อเปิดใช้การเปลี่ยนแปลงลักษณะการทำงาน การเปลี่ยนแปลงดังกล่าวอาจส่งผลต่อวิธีที่แอปเข้าถึง API ของแพลตฟอร์มที่ได้รับผลกระทบจากการเปลี่ยนแปลงนั้น คุณสามารถตรวจสอบว่าเปิดใช้การเปลี่ยนแปลงลักษณะการทำงานใดบ้างโดยใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์, logcat หรือคำสั่ง ADB

ระบุการเปลี่ยนแปลงที่เปิดใช้โดยใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์

รูปที่ 1 หน้าจอการเปลี่ยนแปลงความเข้ากันได้ของแอปในตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์

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

  1. หากยังไม่ได้เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป ให้เปิดใช้
  2. เปิดแอปการตั้งค่าของอุปกรณ์ แล้วไปที่ระบบ > ขั้นสูง > ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ > การเปลี่ยนแปลงความเข้ากันได้ของแอป
  3. เลือกแอปจากรายการ

การเปลี่ยนแปลงลักษณะการทำงานแต่ละรายการมักจะจัดอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งต่อไปนี้

  • การเปลี่ยนแปลงที่ส่งผลต่อแอปทั้งหมดที่ทำงานใน Android เวอร์ชันนั้น โดยไม่คำนึงถึง targetSdkVersion ของแอป

    การเปลี่ยนแปลงเหล่านี้จะเปิดใช้โดยค่าเริ่มต้นในเฟรมเวิร์กความเข้ากันได้ และจะปรากฏใน UI ในส่วนการเปลี่ยนแปลงที่เปิดใช้โดยค่าเริ่มต้น

  • การเปลี่ยนแปลงที่ส่งผลต่อแอปที่กำหนดเป้าหมายเป็น Android บางเวอร์ชันเท่านั้น เนื่องจากการเปลี่ยนแปลงเหล่านี้มีผลกับแอปที่กำหนดเป้าหมายเป็น Android เวอร์ชันที่เจาะจงเท่านั้น จึงเรียกการเปลี่ยนแปลงเหล่านี้ว่าการเปลี่ยนแปลงที่จำกัดโดย targetSDKVersion

    ระบบจะเปิดใช้การเปลี่ยนแปลงเหล่านี้โดยค่าเริ่มต้นในเฟรมเวิร์กความเข้ากันได้ หากแอปกำหนดเป้าหมายเป็นเวอร์ชันที่สูงกว่าเวอร์ชัน API ที่ระบุไว้ ตัวอย่างเช่น การเปลี่ยนแปลงลักษณะการทำงานที่จำกัดโดย targetSDKVersion ใน Android 13 (API ระดับ 33) จะแสดงใน UI ในส่วนที่มีชื่อว่าเปิดใช้สำหรับ targetSdkVersion >=33 ใน Android เวอร์ชันที่ต่ำกว่าบางเวอร์ชัน ส่วนนี้จะชื่อว่า "เปิดใช้หลัง SDK API_LEVEL" แทน

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

ระบุการเปลี่ยนแปลงที่เปิดใช้โดยใช้ Logcat

สําหรับการเปลี่ยนแปลงลักษณะการทํางานแต่ละรายการ ระบบจะแสดงข้อความ logcat ดังต่อไปนี้เป็นครั้งแรกในระหว่างกระบวนการของแอปเมื่อแอปเรียก API ที่ได้รับผลกระทบ

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

กรณีที่ควรปิดการเปลี่ยนแปลง

การพิจารณาว่าจะปิดการเปลี่ยนแปลงเมื่อใดนั้นมักจะขึ้นอยู่กับว่า targetSDKVersion ควบคุมการเปลี่ยนแปลงหรือไม่

การเปลี่ยนแปลงที่เปิดใช้สำหรับแอปทั้งหมด

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

ตัวอย่างเช่น หากกำลังเตรียมกำหนดเป้าหมายเป็น Android 15 (API ระดับ 35) คุณอาจเริ่มต้นด้วยการติดตั้งแอปในอุปกรณ์ที่ใช้ Android 15 และทดสอบแอปโดยใช้เวิร์กโฟลว์การทดสอบทั่วไป ถ้าแอปพบปัญหา คุณสามารถปิดการเปลี่ยนแปลงที่ทำให้เกิดปัญหาเพื่อทดสอบปัญหาอื่นๆ ต่อไปได้

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

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

การเปลี่ยนแปลงถูกกำหนดด้วย targetSDKVersion

หากแอปกําหนดเป้าหมายเป็น targetSDKVersion ที่เจาะจง ระบบจะเปิดใช้การเปลี่ยนแปลงทั้งหมดที่กําหนดโดยเวอร์ชันนั้นโดยค่าเริ่มต้น ดังนั้นเมื่อคุณเปลี่ยน targetSDKVersion ของแอปเป็นเวอร์ชันใหม่ แอปของคุณจะเริ่มได้รับผลกระทบจากการเปลี่ยนแปลงใหม่ๆ หลายรายการพร้อมกัน

เนื่องจากแอปอาจได้รับผลกระทบจากการเปลี่ยนแปลงเหล่านี้มากกว่า 1 รายการ คุณจึงอาจต้องปิดการเปลี่ยนแปลงเหล่านี้ทีละรายการขณะทดสอบและแก้ไขข้อบกพร่องของแอป

กรณีที่ควรเปิดใช้การเปลี่ยนแปลง

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

เช่น คุณอาจทดสอบแอปกับการเปลี่ยนแปลงแพลตฟอร์มชุดหนึ่งใน targetSdkVersion ถัดไป เมื่อใช้ตัวเลือกสำหรับนักพัฒนาแอปหรือคําสั่ง ADB คุณจะเปิดใช้และทดสอบการเปลี่ยนแปลงที่มีการกำหนดสิทธิ์แต่ละรายการทีละรายการได้ แทนที่จะเปลี่ยนไฟล์ Manifest ของแอปและเลือกใช้การเปลี่ยนแปลงทั้งหมดพร้อมกัน การควบคุมเพิ่มเติมนี้จะช่วยให้คุณทดสอบการเปลี่ยนแปลงแบบแยกส่วนและหลีกเลี่ยงการแก้ไขข้อบกพร่องและการอัปเดตหลายส่วนของแอปพร้อมกันได้

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

สลับการเปลี่ยนแปลงเป็นเปิดหรือปิด

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

สลับการเปลี่ยนแปลงโดยใช้ตัวเลือกสำหรับนักพัฒนาแอป

ใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์เพื่อเปิดหรือปิดการเปลี่ยนแปลง หากต้องการค้นหาตัวเลือก สำหรับนักพัฒนาซอฟต์แวร์ ให้ทำตามขั้นตอนต่อไปนี้

  1. หากยังไม่ได้เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป ให้เปิดใช้
  2. เปิดแอปการตั้งค่าของอุปกรณ์ แล้วไปที่ระบบ > ขั้นสูง > ตัวเลือกสำหรับนักพัฒนาแอป > การเปลี่ยนแปลงความเข้ากันได้ของแอป
  3. เลือกแอปจากรายการ
  4. จากรายการการเปลี่ยนแปลง ให้ค้นหาการเปลี่ยนแปลงที่ต้องการเปิดหรือปิด แล้วแตะสวิตช์

    รายการการเปลี่ยนแปลงที่เปิดหรือปิดได้

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