Android 11 เปิดตัวเครื่องมือใหม่สำหรับนักพัฒนาซอฟต์แวร์สำหรับการทดสอบและ การแก้ไขข้อบกพร่องของแอปตามการเปลี่ยนแปลงลักษณะการทำงานใน Android เวอร์ชันใหม่ ที่มีการจัดการครบวงจรได้เลย เครื่องมือเหล่านี้เป็นส่วนหนึ่งของเฟรมเวิร์กความเข้ากันได้ ซึ่งช่วยให้แอป นักพัฒนาซอฟต์แวร์สามารถเปิดและปิดการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบได้โดยใช้นักพัฒนาซอฟต์แวร์ หรือ ADB ใช้ความยืดหยุ่นนี้ขณะที่คุณเตรียมตัวเพื่อกำหนดเป้าหมาย API เวอร์ชันเสถียร และขณะที่คุณทดสอบแอปด้วยรุ่นตัวอย่างของ Android เวอร์ชันถัดไป
เมื่อคุณใช้เครื่องมือเฟรมเวิร์กความเข้ากันได้ แพลตฟอร์ม Android
จะปรับตรรกะภายในให้โดยอัตโนมัติ คุณจึงไม่ต้องเปลี่ยน
targetSDKVersion
หรือคอมไพล์แอปอีกครั้งเพื่อทำการทดสอบพื้นฐาน เพราะ
การเปลี่ยนแปลงจะเปิด/ปิดแยกกันได้
คุณสามารถแยก ทดสอบ และแก้ไขข้อบกพร่องได้
การเปลี่ยนแปลงลักษณะการทำงานครั้งละ 1 รายการ หรือปิดใช้การเปลี่ยนแปลงเพียงรายการเดียวซึ่งทำให้เกิดปัญหาหาก
คุณต้องทดสอบอย่างอื่นก่อน
วิธีระบุการเปลี่ยนแปลงที่เปิดใช้
การเปิดใช้การเปลี่ยนแปลงลักษณะการทำงานอาจส่งผลต่อวิธีที่แอปเข้าถึง API ของแพลตฟอร์มที่ได้รับผลกระทบจากการเปลี่ยนแปลงดังกล่าว คุณตรวจสอบลักษณะการทำงาน เปิดใช้การเปลี่ยนแปลงโดยใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์, คำสั่ง Logcat หรือ ADB
ระบุการเปลี่ยนแปลงที่เปิดใช้โดยใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์
![](https://developer.android.com/static/images/guide/app-compatibility/appcompat-dev-options.png?authuser=2&hl=th)
รูปที่ 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 ต่อไปนี้เพื่อดูชุดการเปลี่ยนแปลงทั้งหมด (เปิดใช้ทั้ง 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 15 (API ระดับ 35)
- Android 14 (API ระดับ 34)
- Android 13 (API ระดับ 33)
- Android 12 (API ระดับ 31 และ 32)
- Android 11 (API ระดับ 30)
เวลาที่ควรสลับการเปลี่ยนแปลง
จุดประสงค์หลักของเฟรมเวิร์กความเข้ากันได้คือการช่วยให้คุณสามารถควบคุม และความยืดหยุ่นขณะที่คุณทดสอบแอปกับ Android เวอร์ชันใหม่ ช่วงเวลานี้ ซึ่งอธิบายกลยุทธ์บางอย่างที่คุณสามารถใช้เพื่อกำหนดเวลาที่ควรเปิด/ปิด ขณะทดสอบและแก้ไขข้อบกพร่องของแอป
เวลาที่จะสลับการเปลี่ยนแปลงเป็นปิด
โดยปกติการตัดสินใจว่าจะปิดการเปลี่ยนแปลงเมื่อใด จะขึ้นอยู่กับว่าการเปลี่ยนแปลงนั้น
ปิดกั้นโดย targetSDKVersion
หรือไม่
- เปิดใช้การเปลี่ยนแปลงสำหรับแอปทั้งหมดแล้ว
การเปลี่ยนแปลงที่มีผลกับแอปทั้งหมดจะเปิดใช้โดย สำหรับแพลตฟอร์มเวอร์ชันที่เจาะจง โดยไม่คำนึงถึงแอป
targetSDKVersion
เพื่อให้คุณทราบว่าแอปได้รับผลกระทบจากการเรียกใช้แอปหรือไม่ ของแอปบนแพลตฟอร์มเวอร์ชันนั้นตัวอย่างเช่น หากคุณกำลังเตรียมกำหนดเป้าหมายเป็น Android 14 (API ระดับ 34) ให้เริ่มด้วยการติดตั้งแอปของคุณบนอุปกรณ์ที่ใช้ Android 14 และทดสอบแอปโดยใช้การทดสอบทั่วไป เวิร์กโฟลว์ ถ้าแอปพบปัญหา คุณสามารถปิดใช้การเปลี่ยนแปลง เป็นสาเหตุของปัญหาเพื่อให้คุณสามารถทำการทดสอบสำหรับปัญหาอื่นๆ ต่อไปได้
เนื่องจากการเปลี่ยนแปลงเหล่านี้อาจส่งผลต่อแอปทั้งหมด ไม่ว่าจะเป็น
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 | การเปลี่ยนแปลงอื่นๆ ทั้งหมด | |
ตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์หรือเวอร์ชันเบต้า | เปิด/ปิดไม่ได้ | สามารถเปิด/ปิด | สามารถเปิด/ปิด |
เวอร์ชันผู้ใช้แบบสาธารณะ | เปิด/ปิดไม่ได้ | สามารถเปิด/ปิด | เปิด/ปิดไม่ได้ |