การย้ายข้อมูลแอปไปยัง Android 9

Android 9 (API ระดับ 28) เปิดตัวฟีเจอร์และ API ใหม่ๆ ที่คุณสามารถใช้ในแอป รวมถึงการเปลี่ยนแปลงลักษณะการทำงานใหม่ๆ เอกสารนี้จะอธิบายภาพรวมของขั้นตอนการย้ายข้อมูลแอปไปยัง Android 9 ผ่าน 2 ระยะหลักๆ ดังนี้

  1. ตรวจสอบความเข้ากันได้ขั้นพื้นฐานกับ Android 9

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

  2. กำหนดเป้าหมายเป็นแพลตฟอร์มใหม่ คอมไพล์ด้วย SDK ของ Android 9 และสร้างด้วยฟีเจอร์ของ Android 9

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

เตรียมอุปกรณ์ที่ใช้ Android 9

หากมีอุปกรณ์ที่เข้ากันได้ ให้ขอภาพระบบ Android 9 สำหรับอุปกรณ์จากผู้ผลิต คลิกที่นี่เพื่อดูภาพระบบเริ่มต้นสำหรับอุปกรณ์ Pixel วิธีการทั่วไปสำหรับ กะพริบอิมเมจระบบที่นี่

คุณยังดาวน์โหลดอิมเมจระบบ Android 9 สำหรับ Android Emulator ได้ด้วย โดยจะแสดงอยู่ใน เครื่องมือจัดการ SDK ภายใต้ Android API 28 เป็น Google APIs Intel x86 Atom System Image

หมายเหตุ: คุณสามารถดาวน์โหลดอิมเมจระบบของโปรแกรมจำลอง Android 9 ได้ใน Android Studio 3.1 ขึ้นไป โดย Android Studio 3.2 จะให้การทำงานร่วมกันได้สูงสุด ดูข้อมูลเพิ่มเติมได้ที่ดาวน์โหลด SDK สำหรับ Android 9

ตรวจสอบความเข้ากันได้กับ Android 9

วัตถุประสงค์คือการตรวจสอบให้แน่ใจว่าแอปที่มีอยู่ของคุณทำงาน Android 9 เนื่องจากการเปลี่ยนแปลงบางอย่างของแพลตฟอร์มอาจส่งผลต่อลักษณะการทํางานของแอป คุณจึงอาจต้องทำการปรับเปลี่ยนบางอย่าง แต่ไม่จำเป็นต้องใช้ API ใหม่หรือเปลี่ยนแปลง targetSdkVersion

ตรวจสอบความเข้ากันได้กับ Android 9 ทีละขั้นตอน

ทำการทดสอบความเข้ากันได้

ส่วนใหญ่แล้ว การทดสอบความเข้ากันได้กับ Android 9 นั้นเกี่ยวข้องกับการทดสอบประเภทเดียวกับที่คุณทำเมื่อเตรียมเผยแพร่แอป นี่เป็นโอกาสที่ดีในการอ่านหลักเกณฑ์ด้านคุณภาพของแอปหลักและแนวทางปฏิบัติแนะนำสำหรับการทดสอบ

อย่างไรก็ตาม การทดสอบยังมีอีกแง่มุมหนึ่งคือ Android 9 มีการเปิดตัวการเปลี่ยนแปลงแพลตฟอร์ม Android ที่อาจส่งผลต่อลักษณะการทํางานของแอปหรือทําให้แอปใช้งานไม่ได้เลย แม้ว่าคุณจะไม่ได้เปลี่ยนแปลงtargetSdkVersionก็ตาม ด้วยเหตุนี้ คุณจึงควรตรวจสอบการเปลี่ยนแปลงที่สำคัญ ในตารางที่ 1 และทดสอบการแก้ไขที่คุณนำไปใช้เพื่อรองรับการเปลี่ยนแปลง

ตารางที่ 1 การเปลี่ยนแปลงสำคัญที่ส่งผลกระทบต่อแอปทั้งหมด ที่ทำงานในอุปกรณ์ Android 9

เปลี่ยน สรุป
ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK ตอนนี้การเข้าถึงอินเทอร์เฟซบางรายการที่ไม่ใช่ SDK ถูกบล็อก ไม่ว่าจะเป็นการเข้าถึงโดยตรงผ่าน JNI หรือผ่านการสะท้อน ความพยายามที่จะเข้าถึงอินเทอร์เฟซที่จำกัดจะทำให้เกิดข้อผิดพลาดต่างๆ เช่น NoSuchFieldException และ NoSuchMethodException ดูรายละเอียดได้ที่ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK
การนำผู้ให้บริการคริปโตออก ตั้งแต่ Android 9 เป็นต้นไป ระบบจะนำผู้ให้บริการ JCA ของ Crypto ออก การโทร ไปยัง SecureRandom.getInstance("SHA1PRNG", "Crypto") จะโยน NoSuchProviderException
ตัวถอดรหัส UTF-8 ที่เข้มงวดมากขึ้น ใน Android 9 ตัวถอดรหัส UTF-8 สำหรับภาษา Java จะเข้มงวดกว่าและเป็นไปตามมาตรฐาน Unicode
การเข้าถึงกล้อง ไมโครโฟน และเซ็นเซอร์ถูกบล็อกสำหรับแอปที่ไม่ได้ใช้งาน ขณะที่แอปไม่มีการใช้งาน แอปจะเข้าถึงเซ็นเซอร์กล้อง ไมโครโฟน หรือ SensorManager ไม่ได้อีกต่อไป

หากต้องการดูรายการการเปลี่ยนแปลงลักษณะการทำงานของแอปทั้งหมดที่ใช้ Android 9 อย่างละเอียดมากขึ้น โปรดดูเอกสารการเปลี่ยนแปลงพฤติกรรม

อัปเดตเวอร์ชันเป้าหมายและใช้ฟีเจอร์ของ Android P

ส่วนนี้จะอธิบายวิธีเปิดใช้การรองรับ Android 9 อย่างเต็มรูปแบบโดยอัปเดต targetSdkVersion เป็น 28 และเพิ่มฟีเจอร์ใหม่ๆ ที่มีใน Android 9

นอกจากการนำเสนอ API ใหม่แล้ว Android 9 ยังมีการเปลี่ยนแปลงลักษณะการทำงานบางอย่างเมื่อคุณอัปเดต targetSdkVersion เป็น 28 เนื่องจากการเปลี่ยนแปลงลักษณะการทำงานบางอย่างอาจต้องมีการเปลี่ยนโค้ดเพื่อหลีกเลี่ยงข้อขัดข้อง คุณจึงควรทำความเข้าใจว่าแอปอาจได้รับผลกระทบอย่างไรเมื่อคุณเปลี่ยน targetSdkVersion โดยตรวจสอบการเปลี่ยนแปลงลักษณะการทำงานทั้งหมดสำหรับแอปที่กำหนดเป้าหมายเป็น Android 9

หมายเหตุ: ขั้นตอนที่อธิบายด้านบนเพื่อ ตรวจสอบว่าความเข้ากันได้ของแพลตฟอร์มเป็นข้อกำหนดเบื้องต้น ในการกําหนดเป้าหมายแอปไปยัง Android 9 ดังนั้น โปรดทําตามขั้นตอนเหล่านั้นก่อน

อัปเดตเวอร์ชันเป้าหมายและใช้ฟีเจอร์ของ Android 9 ทีละขั้นตอน

รับ SDK ของ Android 9

คุณดาวน์โหลดแพ็กเกจ SDK เพื่อสร้างแอปด้วย Android 9 ได้โดยใช้ Android Studio 3.1 ขึ้นไป หากยังไม่ต้องการใช้ฟีเจอร์ใหม่ใน Android 9 และต้องการคอมไพล์กับแพลตฟอร์มเวอร์ชันดังกล่าวเท่านั้น คุณก็ใช้ Android Studio 3.1 ได้ Android Studio 3.2 ให้การสนับสนุนโดยสมบูรณ์สำหรับ ฟีเจอร์ของ Android 9

ทดสอบแอป Android 9

เมื่อเตรียมการข้างต้นเสร็จสมบูรณ์แล้ว คุณสามารถสร้างแอปแล้วทดสอบ เพิ่มเติมเพื่อให้ทำงานได้อย่างถูกต้องเมื่อกำหนดเป้าหมายเป็น Android 9 (API ระดับ 28) นี่เป็นโอกาสที่ดีอีกครั้งที่จะได้อ่านหลักเกณฑ์ด้านคุณภาพของแอปหลักและแนวทางปฏิบัติแนะนำสำหรับการทดสอบ

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

ตาราง 2 จะแสดงรายการการเปลี่ยนแปลงเหล่านี้พร้อมลิงก์ไปยังข้อมูลเพิ่มเติม

ตาราง 2 การเปลี่ยนแปลงสำคัญที่ส่งผลกระทบต่อแอป เมื่อตั้งค่า targetSdkVersion เป็น 28

เปลี่ยน สรุป
สิทธิ์สำหรับบริการที่ทำงานอยู่เบื้องหน้า แอปที่ต้องการใช้บริการที่ทำงานอยู่เบื้องหน้าต้องขอสิทธิ์ FOREGROUND_SERVICE ก่อน นี่เป็นสิทธิ์ปกติ ดังนั้นระบบจะให้สิทธิ์ในการเข้าถึงคำขอ แอป การเริ่มบริการที่ทำงานอยู่เบื้องหน้าโดยไม่มีสิทธิ์จะทำให้ระบบแสดง SecurityException
การเลิกใช้งานการเข้ารหัส Bouncy Castle Android 9 เลิกใช้งานการเข้ารหัสหลายรายการจากผู้ให้บริการ Bouncy Castle และใช้การเข้ารหัสจากผู้ให้บริการ Conscrypt แทน การเรียกใช้ getInstance() ที่ส่งคำขอไปยังผู้ให้บริการ Bouncy Castle จะทำให้เกิดข้อผิดพลาด NoSuchAlgorithmException หากต้องการแก้ไขข้อผิดพลาดนี้ อย่าระบุผู้ให้บริการใน getInstance() (กล่าวคือ ขอการใช้งานเริ่มต้น)
การยกเลิกสิทธิ์เข้าถึง Build.serial โดยตรง ตอนนี้แอปที่จำเป็นต้องใช้ตัวระบุ Build.serial ต้องขอ READ_PHONE_STATE แล้วใช้วิธีการ Build.getSerial() ใหม่ที่เพิ่มเข้ามาใน Android 9
ไม่อนุญาตให้แชร์ไดเรกทอรีข้อมูล WebView แอปไม่สามารถแชร์ไดเรกทอรีข้อมูล WebView รายการเดียวในกระบวนการต่างๆ ได้อีกต่อไป หากแอปของคุณมีกระบวนการที่ใช้ WebView, CookieManager หรือ API อื่นๆ ในแพ็กเกจ android.webkit มากกว่า 1 รายการ แอปจะขัดข้องเมื่อกระบวนการที่ 2 เรียกใช้เมธอด WebView
การเข้าถึงไดเรกทอรีข้อมูลของแอปที่ SELinux บล็อกไว้ ระบบจะบังคับใช้แซนด์บ็อกซ์ SELinux ของแต่ละแอปด้วยข้อจำกัด SELinux ของแต่ละแอปในไดเรกทอรีข้อมูลส่วนตัวของแอปแต่ละแอป ตอนนี้ไม่อนุญาตให้เข้าถึงไดเรกทอรีข้อมูลของแอปอื่นโดยตรงตามเส้นทางแล้ว แอปอาจแชร์ข้อมูลต่อไปโดยใช้กลไก IPC ซึ่งรวมถึงการส่ง FD

ดูรายการการเปลี่ยนแปลงลักษณะการทํางานเพิ่มเติมสําหรับแอปที่กําหนดเป้าหมายเป็น Android 9 ได้ในเอกสารการเปลี่ยนแปลงลักษณะการทํางาน

หากต้องการสำรวจฟีเจอร์และ API ใหม่ๆ ที่พร้อมใช้งานใน Android 9 โปรดดู ฟีเจอร์และ API ของ Android 9