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

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

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

เมื่อใดที่ควรปิดการสลับการเปลี่ยนแปลง

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

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

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

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

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