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

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

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

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

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

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 14 (API ระดับ 34) ให้เริ่มด้วยการติดตั้งแอปของคุณบนอุปกรณ์ที่ใช้ Android 14 และทดสอบแอปโดยใช้การทดสอบทั่วไป เวิร์กโฟลว์ ถ้าแอปพบปัญหา คุณสามารถปิดใช้การเปลี่ยนแปลง เป็นสาเหตุของปัญหาเพื่อให้คุณสามารถทำการทดสอบสำหรับปัญหาอื่นๆ ต่อไปได้

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