การย้ายข้อมูลไปยัง 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 Player) ให้ทำตามวิธีการ แฟลชอุปกรณ์
  • หรือดาวน์โหลดอิมเมจระบบ Android 8.0 สำหรับ Android Emulator ซึ่งจะแสดงอยู่ใน SDK Manager ในส่วน 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 โดยคลิกเครื่องมือ > เครื่องมือจัดการ SDK
  2. ในแท็บแพลตฟอร์ม SDK ให้เลือกแสดงรายละเอียดแพ็กเกจ ด้านล่างนี้คือรายการที่คุณต้องตรวจสอบใน Android 8.0 Preview
    • แพลตฟอร์ม Android SDK 26
    • Google APIs Intel x86 Atom System Image (จำเป็นสำหรับโปรแกรมจำลองเท่านั้น)
  3. เปลี่ยนไปใช้แท็บเครื่องมือ SDK แล้วเลือกรายการทั้งหมดที่อัปเดตได้ (คลิกช่องทําเครื่องหมายแต่ละช่องที่แสดงขีดกลาง ) ซึ่งควรมีรายการต่อไปนี้ในเวอร์ชันล่าสุดซึ่งจําเป็นต้องใช้
    • Android SDK Build-Tools 26.0.0
    • เครื่องมือแพลตฟอร์ม Android SDK 26.0.0
    • Android Emulator 26.0.0
  4. คลิกตกลงเพื่อติดตั้งแพ็กเกจ SDK ที่เลือกทั้งหมด

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

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

อัปเดต compileSdkVersion, targetSdkVersion และ Support Library เป็นเวอร์ชันล่าสุดที่มี เช่น

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 ที่ลงทะเบียนไว้สำหรับ Intent แบบโดยนัยออก การวางไว้จะไม่ทำให้แอปใช้งานไม่ได้ขณะที่คอมไพล์หรือรันไทม์ แต่จะไม่มีผลเมื่อแอปทำงานใน Android 8.0

การประกาศที่เฉพาะแอปของคุณเท่านั้นที่จะตอบสนองได้ ซึ่งได้แก่ Intent การประกาศที่ชัดเจนและการประกาศที่ส่งไปยังชื่อแพ็กเกจของแอปโดยเฉพาะ จะยังคงทำงานเหมือนเดิมใน 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 ตัวลิงก์แบบไดนามิกจะตรวจสอบค่าเพิ่มเติมในส่วนหัว ELF และส่วนหัวของส่วน และจะไม่ผ่านการตรวจสอบหากค่าไม่ถูกต้อง การเปลี่ยนแปลงลักษณะการทํางาน: ไลบรารีแบบเนทีฟ
การแจ้งเตือน แอปที่กำหนดเป้าหมาย SDK เวอร์ชัน Android 8.0 (API ระดับ 26) ต้องใช้ช่องทางการแจ้งเตือนอย่างน้อย 1 ช่องทางเพื่อโพสต์การแจ้งเตือนไปยังผู้ใช้ ภาพรวม API: การแจ้งเตือน
List.sort() การใช้งานวิธีการนี้อาจไม่เรียกใช้ Collections.sort() อีกต่อไป หรือแอปจะส่งข้อยกเว้นเนื่องจากสแต็กโอเวอร์โฟลว์ การเปลี่ยนแปลงลักษณะการทํางาน: การจัดการคอลเล็กชัน
เมธอด Collections.sort() ในการใช้งาน List ตอนนี้ Collections.sort() จะแสดงข้อผิดพลาด ConcurrentModificationException ลักษณะการทํางาน การเปลี่ยนแปลง: การจัดการคอลเล็กชัน

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

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