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

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

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

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

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

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

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

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

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

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

  • หากคุณมีอุปกรณ์ที่เข้ากันได้ (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P หรือ Nexus โปรแกรมเล่น) โปรดทำตามขั้นตอน คำแนะนำ เพื่อแฟลชอุปกรณ์
  • หรือดาวน์โหลดอิมเมจระบบ Android 8.0 สำหรับ Android Emulator โดยจะแสดงอยู่ใน เครื่องมือจัดการ SDK ภายใต้ Android 8.0 เป็น Google APIs Intel x86 Atom System Image

    หมายเหตุ: อิมเมจระบบ Android 8.0 มีให้ดาวน์โหลดจาก Android Studio 3.0 ขึ้นไป โปรดดูข้อมูลเพิ่มเติมในส่วนด้านล่างเพื่อรับ SDK สำหรับ Android 8.0

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

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

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

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

เปลี่ยน สรุป ข้อมูลอ้างอิงเพิ่มเติม
การอัปเดตตำแหน่งในเบื้องหลังน้อยลง หากแอปได้รับการอัปเดตตำแหน่งจากบริการในเบื้องหลัง ก็จะได้รับความถี่ในการอัปเดตน้อยลง การอัปเดตใน Android 8.0 (API ระดับ 26) เมื่อเทียบกับ Android เวอร์ชันเก่า โดยเฉพาะอย่างยิ่ง พื้นหลัง บริการไม่สามารถรับการอัปเดตตำแหน่งมากกว่า 2-3 ครั้งต่อชั่วโมง อย่างไรก็ตาม แม้ว่า แอปทำงานอยู่เบื้องหน้า อัตราการอัปเดตตำแหน่งจะไม่เปลี่ยนแปลง ขีดจำกัดของตำแหน่งในเบื้องหลัง
net.hostnameที่ไม่รองรับอีกต่อไป การค้นหาพร็อพเพอร์ตี้ของระบบ net.hostname จะสร้างผลลัพธ์ที่เป็นนัล ไม่มี
ข้อยกเว้นใหม่จาก send(DatagramPacket) เมธอด send(DatagramPacket) จะแสดง SocketException หากเมธอด connect(InetAddress, int) ที่ดำเนินการก่อนหน้านี้ล้มเหลว การเปลี่ยนแปลงลักษณะการทำงาน: การเชื่อมต่อเครือข่ายและ HTTP(S)
NullPointerException ที่ถูกต้องจาก AbstractCollection วิธี AbstractCollection.removeAll(null) และ ตอนนี้ AbstractCollection.retainAll(null) ส่งบอลลูน NullPointerException; ก่อนหน้านี้ ระบบจะไม่ใส่ NullPointerException เมื่อคอลเล็กชันว่างเปล่า การเปลี่ยนแปลงนี้จะทำให้ลักษณะการทำงานสอดคล้องกับเอกสาร การเปลี่ยนแปลงลักษณะการทำงาน: การจัดการการเก็บรวบรวม
NullPointerException ที่ถูกต้องจาก วันที่ Currency.getDisplayName(null) กำลังโทรหา Currency.getDisplayName(null) ขว้าง NullPointerException การเปลี่ยนแปลงลักษณะการทำงาน: ภาษาและการปรับให้เป็นสากล

สำหรับรายการการเปลี่ยนแปลงลักษณะการทำงานที่มากขึ้นใน Android 8.0 (API ระดับ 26) และ ดูการเปลี่ยนแปลงลักษณะการทำงานของ Android 8.0

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

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

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

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

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

รับ SDK สำหรับ Android 8.0

คุณสามารถรับแพ็กเกจ SDK เพื่อสร้างแอปด้วย Android 8.0 (API ระดับ 26) โดยใช้เวอร์ชันล่าสุดของ Android Studio (แนะนำให้ใช้ Android Studio 3.0 ขึ้นไป) Android Studio 3.0 ขึ้นไปมีเครื่องมือที่ช่วยคุณเกี่ยวกับฟีเจอร์ต่างๆ ของ Android 8.0 เช่น ไอคอนแบบปรับอัตโนมัติและ แบบอักษรที่ดาวน์โหลดได้ หากยังไม่มีฟีเจอร์เหล่านั้น ให้ใช้ Android Studio เวอร์ชันเสถียร 2.3.3 เพื่อสร้างแอปด้วย Android 8.0 และใช้ API ใหม่

หากต้องการตั้งค่า Android Studio เวอร์ชันใดเวอร์ชันหนึ่ง ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด Android Studio และเปิด SDK Manager โดยคลิก เครื่องมือ > SDK Manager
  2. ในแท็บแพลตฟอร์ม SDK ให้เลือกแสดงรายละเอียดแพ็กเกจ ต่ำกว่า ตัวอย่าง Android 8.0 ตรวจสอบสิ่งต่อไปนี้
    • แพลตฟอร์ม Android SDK 26
    • Google APIs Intel x86 Atom System Image (จำเป็นสำหรับโปรแกรมจำลองเท่านั้น)
  3. สลับไปที่แท็บเครื่องมือ SDK และตรวจสอบรายการทั้งหมดที่มีการอัปเดต (คลิก ช่องทำเครื่องหมายแต่ละช่องที่แสดงเครื่องหมายขีดกลาง ) ซึ่งควรมีเวอร์ชันล่าสุดของรายการต่อไปนี้ ที่จำเป็น ได้แก่
    • เครื่องมือสร้าง Android SDK เวอร์ชัน 26.0.0
    • เครื่องมือแพลตฟอร์ม Android SDK 26.0.0
    • โปรแกรมจำลอง Android 26.0.0
  4. คลิกตกลงเพื่อติดตั้งแพ็กเกจ SDK ที่เลือกทั้งหมด

ตอนนี้คุณพร้อมเริ่มสร้างด้วย Android 8.0 แล้ว

อัปเดตการกำหนดค่าบิลด์

อัปเดต compileSdkVersion targetSdkVersion และไลบรารีการสนับสนุนเป็นเวอร์ชันล่าสุด การแก้ไขที่ใช้ได้ เช่น

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

นำ Broadcast Receiver ออกจากไฟล์ Manifest

เนื่องจาก Android 8.0 (API ระดับ 26) มีการเปิดตัวฟีเจอร์ใหม่ ข้อจำกัด สำหรับ Broadcast Receiver คุณควรนำ Broadcast Receiver ทั้งหมดที่ ลงทะเบียนสำหรับการออกอากาศแบบ implicit แล้ว การปล่อยไว้เฉยๆ จะไม่ทำให้แอปเสียหาย ที่เวลาบิลด์หรือรันไทม์ แต่จะไม่ส่งผลใดๆ เมื่อแอปของคุณทำงานบน Android 8.0

การออกอากาศที่มีเพียงแอปของคุณเท่านั้นที่สามารถตอบสนองได้ เช่น การออกอากาศที่โจ่งแจ้ง ออกอากาศที่ส่งไปยังชื่อแพ็กเกจของแอปโดยเฉพาะ ให้ทำงานแบบเดิมต่อไปใน Android 8.0

ข้อจำกัดใหม่นี้มีข้อยกเว้น สำหรับ รายการการออกอากาศโดยนัยที่ยังใช้งานได้ในแอปที่กำหนดเป้าหมายเป็น Android 8.0 โปรดดูที่ข้อยกเว้นการออกอากาศโดยนัย

ทดสอบแอป Android 8.0

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

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

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

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

เปลี่ยน สรุป ข้อมูลอ้างอิงเพิ่มเติม
ความเป็นส่วนตัว Android 8.0 (API ระดับ 26) ไม่สนับสนุนการใช้ net.dns1, net.dns2, net.dns3 หรือ net.dns4 พร็อพเพอร์ตี้ของระบบ การเปลี่ยนแปลงลักษณะการทำงาน: ความเป็นส่วนตัว
บังคับใช้กลุ่มที่เขียนได้และดำเนินการได้ สำหรับไลบรารีแบบเนทีฟ Android 8.0 (API ระดับ 26) จะบังคับใช้กฎที่ ข้อมูลไม่ควรเป็นไฟล์ปฏิบัติการ และโค้ดไม่ควรเขียนได้ การเปลี่ยนแปลงลักษณะการทำงาน: ไลบรารีเนทีฟ
การตรวจสอบส่วนหัวและส่วน ELF Linker แบบไดนามิกจะตรวจสอบค่าเพิ่มเติมในส่วนหัว ELF และส่วนหัวของส่วน และจะดำเนินการไม่สำเร็จหากข้อมูลเหล่านั้นไม่ถูกต้อง การเปลี่ยนแปลงลักษณะการทำงาน: ไลบรารีเนทีฟ
การแจ้งเตือน แอปที่กำหนดเป้าหมาย SDK เวอร์ชัน Android 8.0 (API ระดับ 26) ต้องใช้ช่องทางการแจ้งเตือนอย่างน้อย 1 ช่องทางเพื่อโพสต์ การแจ้งเตือนไปยังผู้ใช้ ภาพรวมของ API: การแจ้งเตือน
เมธอด List.sort() การใช้งานวิธีการนี้อาจไม่เรียกใช้ Collections.sort() อีกต่อไป หรือแอปจะส่งข้อยกเว้นเนื่องจากสแต็กโอเวอร์โฟลว์ การเปลี่ยนแปลงลักษณะการทำงาน: การจัดการคอลเล็กชัน
เมธอด Collections.sort() ในรายการการติดตั้งใช้งาน Collections.sort() มีการแสดงข้อผิดพลาด ConcurrentModificationException พฤติกรรม การเปลี่ยนแปลง: การจัดการการเก็บรวบรวม

สำหรับรายการการเปลี่ยนแปลงลักษณะการทำงานที่มากขึ้นใน Android 8.0 (API ระดับ 26) ดูการเปลี่ยนแปลงลักษณะการทำงานของ Android 8.0

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