APK ที่คุณจะอัปโหลดต้องตรงตามข้อกำหนดระดับ API เป้าหมายของ Google Play
ตั้งแต่วันที่ 31 สิงหาคม 2024 เป็นต้นไปจะมีการดำเนินการต่อไปนี้
- แอปใหม่และอัปเดตแอปต้องกำหนดเป้าหมายเป็น Android 14 (API ระดับ 34) ขึ้นไปเพื่อส่งไปยัง Google Play ยกเว้นแอป Wear OS และ Android TV ซึ่งต้องกำหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไป
- แอปที่มีอยู่ต้องกำหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไปเพื่อให้พร้อมใช้งานสำหรับผู้ใช้ใหม่ซึ่งมีอุปกรณ์ที่ใช้ระบบปฏิบัติการ Android เวอร์ชันใหม่กว่าระดับ API เป้าหมายของแอป แอปที่กำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) หรือต่ำกว่า (Android 10 (API ระดับ 29) หรือต่ำกว่าสำหรับ Wear OS และ Android 11 (API ระดับ 30) หรือต่ำกว่าสำหรับ Android TV) จะพร้อมใช้งานเฉพาะในอุปกรณ์ที่ใช้ระบบปฏิบัติการ Android ที่มีเวอร์ชันเดียวกันหรือต่ำกว่าระดับ API เป้าหมายของแอปเท่านั้น
คุณจะขอขยายเวลาได้จนถึงวันที่ 1 พฤศจิกายน 2024 หากต้องการเวลาเพิ่มเติมในการอัปเดตแอป และจะเข้าถึงแบบฟอร์มขยายเวลาของแอปใน Play Console ได้ภายในปีนี้
ข้อยกเว้นสำหรับข้อกำหนดเหล่านี้ ได้แก่
- แอปส่วนตัวแบบถาวรที่จำกัดไว้สำหรับผู้ใช้ในองค์กรหนึ่งโดยเฉพาะและมีไว้เพื่อการเผยแพร่ภายในเท่านั้น
- แอปที่กำหนดเป้าหมายเป็น Android Automotive OS หรือรวมอยู่ใน APK ที่กำหนดเป้าหมายเป็น Android Automotive OS
เหตุผลที่ควรกําหนดเป้าหมาย SDK เวอร์ชันใหม่
Android เวอร์ชันใหม่ทุกเวอร์ชันมีการเปลี่ยนแปลงที่ช่วยเพิ่มความปลอดภัยและประสิทธิภาพ และช่วยปรับปรุงประสบการณ์การใช้งาน Android ของผู้ใช้ การเปลี่ยนแปลงบางอย่างจะมีผลกับแอปที่ประกาศการรองรับอย่างชัดเจนผ่านtargetSdkVersion
แอตทริบิวต์ไฟล์ Manifest (หรือที่เรียกว่าระดับ API เป้าหมาย) เท่านั้น
การกำหนดค่าแอปให้กำหนดเป้าหมายเป็น API ระดับล่าสุดจะทำให้ผู้ใช้ได้รับประโยชน์จากการปรับปรุงเหล่านี้ ในขณะที่แอปยังทำงานใน Android เวอร์ชันเก่าได้ การกําหนดเป้าหมายเป็น API ระดับล่าสุดยังช่วยให้แอปของคุณใช้ประโยชน์จากฟีเจอร์ล่าสุดของแพลตฟอร์มเพื่อสร้างความพึงพอใจให้แก่ผู้ใช้ได้ด้วย นอกจากนี้ ตั้งแต่ Android 10 (API ระดับ 29) เป็นต้นไป ผู้ใช้จะเห็นคำเตือนเมื่อเปิดแอปเป็นครั้งแรกหากแอปกำหนดเป้าหมายเป็น Android 5.1 (API ระดับ 22) หรือต่ำกว่า
เอกสารนี้จะไฮไลต์ประเด็นสำคัญที่คุณควรทราบเกี่ยวกับการอัปเดตระดับ API เป้าหมายเพื่อให้เป็นไปตามข้อกำหนดของ Google Play ดูวิธีการในส่วนต่อไปนี้ โดยขึ้นอยู่กับเวอร์ชันที่คุณจะย้ายข้อมูลไป
ย้ายข้อมูลจาก Android 12 ขึ้นไป (API ระดับ 31) ไปยังเวอร์ชันที่ใหม่กว่า
หากต้องการอัปเดตแอปให้กำหนดเป้าหมายเป็น Android เวอร์ชันที่ใหม่กว่า ให้ทำตามรายการการเปลี่ยนแปลงลักษณะการทำงานที่เกี่ยวข้องต่อไปนี้
ย้ายข้อมูลจาก Android 11 (API ระดับ 30) ไปยัง Android 12 (API ระดับ 31)
ความปลอดภัยและสิทธิ์
- บลูทูธ: คุณต้องแทนที่การประกาศสิทธิ์
BLUETOOTH
และBLUETOOTH_ADMIN
ด้วยสิทธิ์BLUETOOTH_SCAN
,BLUETOOTH_ADVERTISE
หรือBLUETOOTH_CONNECT
คุณไม่จำเป็นต้องส่งLOCATION
คำขอสิทธิ์รันไทม์สำหรับการดำเนินการบลูทูธอีกต่อไป - ตำแหน่ง: ผู้ใช้สามารถขอให้แอปเรียกข้อมูลตำแหน่งโดยประมาณเท่านั้น คุณต้องขอสิทธิ์
ACCESS_COARSE_LOCATION
ทุกครั้งที่ขอACCESS_FINE_LOCATION
- ตัวกรอง Intent: หากแอปมีกิจกรรม บริการ หรือ Broadcast Receiver ที่ใช้ตัวกรอง Intent คุณต้องประกาศแอตทริบิวต์ android:exported อย่างชัดเจนสำหรับคอมโพเนนต์เหล่านี้
- โหมดพัก: แอปอาจเข้าสู่โหมดพักหากไม่มีการใช้งานเป็นระยะเวลาหนึ่ง ในโหมดไฮเบอร์เนชัน ระบบจะรีเซ็ตสิทธิ์รันไทม์และแคชของแอป และคุณจะเรียกใช้งานหรือการแจ้งเตือนไม่ได้ คุณสามารถตรวจสอบสถานะการพักของแอป
- ความสามารถในการเปลี่ยนแปลงของ PendingIntent: คุณต้องระบุการเปลี่ยนแปลงของออบเจ็กต์ PendingIntent แต่ละรายการที่แอปของคุณสร้าง
ประสบการณ์ของผู้ใช้
- การแจ้งเตือนที่กำหนดเอง: การแจ้งเตือนที่มีมุมมองเนื้อหาที่กำหนดเองจะไม่ใช้พื้นที่การแจ้งเตือนเต็มรูปแบบอีกต่อไป แต่ระบบจะใช้เทมเพลตมาตรฐานแทน เทมเพลตนี้ช่วยให้การแจ้งเตือนที่กำหนดเองมีการตกแต่งเหมือนกับการแจ้งเตือนอื่นๆ ในทุกสถานะ ลักษณะการทํางานนี้เกือบจะเหมือนกับลักษณะการทํางานของ
Notification.DecoratedCustomViewStyle
- การเปลี่ยนแปลงการยืนยัน Android App Link: เมื่อใช้การยืนยัน Android App Link โปรดตรวจสอบว่าตัวกรอง Intent ของคุณมีหมวดหมู่ที่เรียกดูได้และรองรับรูปแบบ HTTPS
ประสิทธิภาพ
การจํากัดการเปิดบริการที่ทำงานอยู่เบื้องหน้า: หากกำหนดเป้าหมายเป็น Android 12 ขึ้นไป แอปของคุณจะไม่สามารถเริ่มบริการที่ทำงานอยู่เบื้องหน้าขณะทำงานอยู่เบื้องหลังได้ ยกเว้นบางกรณีพิเศษ หากแอปพยายามเริ่มบริการที่ทำงานอยู่เบื้องหน้าขณะทำงานอยู่เบื้องหลัง ระบบจะยกเว้น (ยกเว้นบางกรณีพิเศษ)
ลองใช้ WorkManager เพื่อกำหนดเวลาและเริ่มงานเร่งด่วนขณะที่แอปทำงานอยู่เบื้องหลัง หากต้องการดำเนินการที่ขึ้นอยู่กับเวลาซึ่งผู้ใช้ร้องขอ ให้เริ่มบริการที่ทำงานอยู่เบื้องหน้าภายในการแจ้งเตือนที่แน่นอน
ข้อจํากัดของ Trampoline การแจ้งเตือน: เมื่อผู้ใช้แตะการแจ้งเตือน แอปบางแอปจะตอบสนองด้วยการเปิดคอมโพเนนต์แอปที่เริ่มกิจกรรมที่ผู้ใช้เห็นและโต้ตอบด้วย คอมโพเนนต์แอปนี้เรียกว่า "แทรมโปลีนการแจ้งเตือน"
แอปต้องไม่เริ่มกิจกรรมจากบริการหรือตัวรับการออกอากาศที่ใช้เป็นแทรมโพลีนการแจ้งเตือน หลังจากผู้ใช้แตะการแจ้งเตือนหรือปุ่มดำเนินการภายในการแจ้งเตือน แอปของคุณจะเรียก
startActivity()
ภายในบริการหรือตัวรับการออกอากาศไม่ได้
ดูการเปลี่ยนแปลงทั้งหมดที่ส่งผลต่อแอปที่กำหนดเป้าหมายเป็น Android 12 (API ระดับ 31)
ย้ายข้อมูลจากเวอร์ชันที่ต่ำกว่า Android 11 (API ระดับ 30)
เลือกเวอร์ชัน Android ที่จะย้ายข้อมูล
ย้ายข้อมูลไปยัง Android 5 (API ระดับ 21)
โปรดดูหน้าการเปลี่ยนแปลงลักษณะการทํางานที่เกี่ยวข้องของรุ่นต่อไปนี้เพื่อให้แน่ใจว่าแอปของคุณได้พิจารณาถึงการเปลี่ยนแปลงที่เปิดตัวในรุ่นเหล่านี้แล้ว
ดำเนินการต่อด้วยการปฏิบัติตามวิธีการในส่วนถัดไป
ย้ายข้อมูลไปยัง Android 6 (API ระดับ 23)
ข้อควรพิจารณาต่อไปนี้มีผลกับแอปที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Android เวอร์ชัน 6.0 ขึ้นไป
-
-
สิทธิ์ที่เป็นอันตรายจะได้รับการอนุญาตเมื่อรันไทม์เท่านั้น ขั้นตอน UI ของคุณต้องมีสิ่งอํานวยความสะดวกในการให้สิทธิ์เหล่านี้
-
ตรวจสอบว่าแอปของคุณพร้อมรับมือกับการปฏิเสธคำขอสิทธิ์ทุกครั้งที่เป็นไปได้ เช่น หากผู้ใช้ปฏิเสธคำขอเข้าถึง GPS ของอุปกรณ์ โปรดตรวจสอบว่าแอปมีวิธีอื่นในการดำเนินการต่อ
-
ดูรายการการเปลี่ยนแปลงทั้งหมดที่เปิดตัวใน Android 6.0 (API ระดับ 23) ได้ที่หน้าการเปลี่ยนแปลงลักษณะการทํางานของแพลตฟอร์มเวอร์ชันนั้น
ดำเนินการต่อด้วยการปฏิบัติตามวิธีการในส่วนถัดไป
ย้ายข้อมูลไปยัง Android 7 (API ระดับ 24)
ข้อควรพิจารณาต่อไปนี้มีผลกับแอปที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Android 7.0 ขึ้นไป
-
Doze และสแตนด์บายแอป
ออกแบบให้เป็นไปตามลักษณะการทำงานที่อธิบายไว้ในการเพิ่มประสิทธิภาพสำหรับ Doze และสแตนด์บายแอป ซึ่งรวมถึงการเปลี่ยนแปลงเพิ่มเติมที่เปิดตัวในแพลตฟอร์มหลายรุ่น
เมื่ออุปกรณ์อยู่ในโหมด Doze และสแตนด์บายแอป ระบบจะทำงานดังนี้
- จำกัดการเข้าถึงเครือข่าย
- เลื่อนการปลุก ซิงค์ และงาน
- จำกัดการสแกน GPS และ Wi-Fi
- จำกัดข้อความ Firebase Cloud Messaging ที่มีลําดับความสําคัญปกติ
-
การเปลี่ยนแปลงสิทธิ์
- ระบบจะจำกัดการเข้าถึงไดเรกทอรีส่วนตัวของแอป
-
การเปิดเผย
file://
URI ภายนอกแอปจะทริกเกอร์FileUriExposedException
หากต้องการแชร์ไฟล์นอกแอป ให้ใช้FileProvider
-
ระบบไม่อนุญาตให้ลิงก์กับไลบรารีที่ไม่ใช่ NDK
ดูรายการการเปลี่ยนแปลงทั้งหมดที่เปิดตัวใน Android 7.0 (API ระดับ 24) ได้ที่หน้าการเปลี่ยนแปลงลักษณะการทํางานของแพลตฟอร์มเวอร์ชันนั้น
ดำเนินการต่อด้วยการปฏิบัติตามวิธีการในส่วนถัดไป
ย้ายข้อมูลไปยัง Android 8 (API ระดับ 26)
ข้อควรพิจารณาต่อไปนี้มีผลกับแอปที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Android เวอร์ชัน 8.0 ขึ้นไป
-
ขีดจํากัดของการดำเนินการเบื้องหลัง
-
ระบบจะจำกัดบริการสำหรับแอปที่ไม่ได้ทำงานในพื้นหน้า
-
ตอนนี้
startService()
จะแสดงข้อยกเว้นเมื่อแอปพยายามเรียกใช้ขณะที่startService()
ถูกห้าม -
หากต้องการเริ่มบริการที่ทำงานอยู่เบื้องหน้า แอปต้องใช้
startForeground()
และstartForegroundService()
- โปรดตรวจสอบการเปลี่ยนแปลงที่เกิดขึ้นกับ JobScheduler API อย่างละเอียดตามที่ระบุไว้ในหน้าการเปลี่ยนแปลงลักษณะการทำงานของ Android 8.0 (API ระดับ 26)
- Firebase Cloud Messaging ต้องใช้ Google Play Services SDK เวอร์ชัน 10.2.1 ขึ้นไป
- เมื่อใช้ Firebase Cloud Messaging การส่งข้อความจะขึ้นอยู่กับขีดจํากัดการดําเนินการในเบื้องหลัง เมื่อจำเป็นต้องทำงานในเบื้องหลังเมื่อได้รับข้อความ เช่น เพื่อซิงค์ข้อมูลในเบื้องหลัง แอปของคุณควรกำหนดเวลางานโดยใช้ Firebase Job Dispatcher หรือ JobIntentService แทน ดูข้อมูลเพิ่มเติมได้ที่ เอกสารประกอบของ Firebase Cloud Messaging
-
ตอนนี้
-
การออกอากาศโดยนัย
-
มีการจำกัดการออกอากาศโดยนัย ดูข้อมูลเกี่ยวกับการจัดการเหตุการณ์เบื้องหลังได้ในเอกสารประกอบของ
JobScheduler
API
-
มีการจำกัดการออกอากาศโดยนัย ดูข้อมูลเกี่ยวกับการจัดการเหตุการณ์เบื้องหลังได้ในเอกสารประกอบของ
-
ขีดจำกัดของตำแหน่งในเบื้องหลัง
-
แอปที่ทำงานอยู่ในพื้นหลังมีสิทธิ์เข้าถึงข้อมูลตำแหน่งแบบจำกัด
- ในอุปกรณ์ที่มีบริการ Google Play ให้ใช้ ผู้ให้บริการตำแหน่งแบบรวมเพื่อรับการอัปเดตตำแหน่งเป็นระยะๆ
-
แอปที่ทำงานอยู่ในพื้นหลังมีสิทธิ์เข้าถึงข้อมูลตำแหน่งแบบจำกัด
-
ระบบจะจำกัดบริการสำหรับแอปที่ไม่ได้ทำงานในพื้นหน้า
-
ช่องทางการแจ้งเตือน
- คุณควรกำหนด พร็อพเพอร์ตี้การหยุดการแจ้งเตือนชั่วคราวตามแต่ละช่องทาง
- คุณต้องกำหนดการแจ้งเตือนให้กับช่องทางเพื่อแสดงการแจ้งเตือน
-
แพลตฟอร์มเวอร์ชันนี้รองรับ
NotificationCompat.Builder
-
ความเป็นส่วนตัว
- ANDROID_ID มีผลเฉพาะกับคีย์ App Signing แต่ละรายการ
ดูรายการการเปลี่ยนแปลงทั้งหมดที่เปิดตัวใน Android 8.0 (API ระดับ 26) ได้ที่หน้าการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มเวอร์ชันนั้น
ย้ายข้อมูลจาก Android 8 (API 26) ไปยัง Android 9 (API 28)
-
การจัดการพลังงาน
- ที่เก็บข้อมูลสแตนด์บายแอปจะเพิ่มข้อจำกัดใหม่ในเบื้องหลังตามการมีส่วนร่วมของแอป เช่น งานที่กำหนดเวลาเลื่อนออกไป การปลุก และโควต้าสำหรับข้อความที่มีลำดับความสำคัญสูง
- การปรับปรุงโหมดประหยัดแบตเตอรี่ เพิ่มข้อจำกัดในแอปที่อยู่ในโหมดรอ
-
สิทธิ์บริการที่ทำงานอยู่เบื้องหน้า
- ต้องขอสิทธิ์ปกติ
FOREGROUND_SERVICE
(ไม่ใช่สิทธิ์รันไทม์)
- ต้องขอสิทธิ์ปกติ
-
การเปลี่ยนแปลงด้านความเป็นส่วนตัว
- การเข้าถึงเซ็นเซอร์ที่ทำงานอยู่เบื้องหลังอย่างจำกัด
- จำกัดสิทธิ์เข้าถึงประวัติการโทร ซึ่งตอนนี้อยู่ในกลุ่มสิทธิ์
CALL_LOG
- จำกัดสิทธิ์เข้าถึงหมายเลขโทรศัพท์ โดยต้องมีสิทธิ์
READ_CALL_LOG
- จำกัดสิทธิ์เข้าถึงข้อมูล Wi-Fi
ดูรายการการเปลี่ยนแปลงทั้งหมดที่เปิดตัวใน Android 9.0 (API ระดับ 28) ได้ที่การเปลี่ยนแปลงลักษณะการทำงาน
ย้ายข้อมูลจาก Android 9 (API ระดับ 28) ไปยัง Android 10 (API ระดับ 29)
-
การแจ้งเตือนที่มี Intent แบบเต็มหน้าจอ
-
ต้องขอสิทธิ์ปกติ
USE_FULL_SCREEN_INTENT
(ไม่ใช่สิทธิ์รันไทม์)
-
ต้องขอสิทธิ์ปกติ
-
การรองรับอุปกรณ์แบบพับได้และอุปกรณ์หน้าจอขนาดใหญ่
-
ตอนนี้กิจกรรมหลายรายการอยู่ในสถานะ "กลับมาทำงานต่อ" ได้พร้อมกัน แต่จะมีเพียงกิจกรรมเดียวที่มีโฟกัส
-
การเปลี่ยนแปลงนี้จะส่งผลต่อลักษณะการทํางานของ
onResume()
และonPause()
-
แนวคิดวงจรของลูกค้าใหม่ "กลับมาทำงานต่อจากด้านบนสุด" ซึ่งสามารถตรวจพบได้ด้วยการสมัครรับข้อมูล
onTopResumedActivityChanged()
- กิจกรรมที่ "กลับมาทำงานต่อบนสุด" ได้เพียงรายการเดียวเท่านั้น
-
การเปลี่ยนแปลงนี้จะส่งผลต่อลักษณะการทํางานของ
-
เมื่อตั้งค่า
resizeableActivity
เป็นfalse
แอปจะระบุminAspectRatio
เพิ่มเติมได้ ซึ่งจะใส่แถบดำด้านบนและด้านล่างโดยอัตโนมัติเมื่อแอปแสดงผลในอัตราส่วนภาพแคบกว่า
-
ตอนนี้กิจกรรมหลายรายการอยู่ในสถานะ "กลับมาทำงานต่อ" ได้พร้อมกัน แต่จะมีเพียงกิจกรรมเดียวที่มีโฟกัส
-
การเปลี่ยนแปลงด้านความเป็นส่วนตัว
-
พื้นที่เก็บข้อมูลที่มีขอบเขต
- การเข้าถึงพื้นที่เก็บข้อมูลภายนอกจะจำกัดไว้เฉพาะไดเรกทอรีเฉพาะแอปและสื่อบางประเภทที่แอปสร้างขึ้นเท่านั้น
-
จำกัดการเข้าถึงตำแหน่งขณะที่แอปทำงานในเบื้องหลัง โดยต้องใช้สิทธิ์
ACCESS_BACKGROUND_LOCATION
- การเข้าถึงที่จำกัดสำหรับตัวระบุที่รีเซ็ตไม่ได้ เช่น IMEI และหมายเลขซีเรียล
-
การเข้าถึงข้อมูลการเคลื่อนไหวร่างกายอย่างจำกัด เช่น จำนวนก้าวของผู้ใช้ โดยต้องใช้สิทธิ์
ACTIVITY_RECOGNITION
-
การเข้าถึงAPI บางอย่างของโทรศัพท์ บลูทูธ และ Wi-Fi ถูกจํากัด โดยต้องใช้สิทธิ์
ACCESS_FINE_LOCATION
-
จำกัดสิทธิ์เข้าถึงการตั้งค่า Wi-Fi
- แอปไม่สามารถเปิดหรือปิดใช้ Wi-Fi โดยตรงได้อีกต่อไป และต้องดำเนินการโดยใช้แผงการตั้งค่า
-
ข้อจำกัดในการเริ่มต้นการเชื่อมต่อเครือข่าย Wi-Fi ซึ่งกำหนดให้ต้องใช้
WifiNetworkSpecifier
หรือWifiNetworkSuggestion
-
พื้นที่เก็บข้อมูลที่มีขอบเขต
ย้ายข้อมูลจาก Android 10 (API ระดับ 29) ไปยัง Android 11 (API ระดับ 30)
-
ความเป็นส่วนตัว
- การบังคับใช้พื้นที่เก็บข้อมูลแบบจำกัด : แอปควรใช้รูปแบบพื้นที่เก็บข้อมูลแบบจำกัดซึ่งจะบันทึกและเข้าถึงไฟล์ประเภทต่างๆ เฉพาะแอปและสื่อโดยใช้ตำแหน่งเฉพาะ
- รีเซ็ตสิทธิ์โดยอัตโนมัติ: หากผู้ใช้ไม่ได้โต้ตอบกับแอปเป็นเวลา 2-3 เดือน ระบบจะรีเซ็ตสิทธิ์ที่มีความละเอียดอ่อนของแอปโดยอัตโนมัติ การดำเนินการนี้จะไม่ส่งผลต่อแอปส่วนใหญ่ หากแอปทำงานในเบื้องหลังเป็นหลักโดยที่ผู้ใช้ไม่โต้ตอบ คุณอาจขอให้ผู้ใช้ปิดใช้การรีเซ็ตอัตโนมัติ
- การเข้าถึงตำแหน่งในเบื้องหลัง: แอปต้องขอสิทธิ์เข้าถึงตำแหน่งในเบื้องหน้าและเบื้องหลังแยกกัน การให้สิทธิ์เข้าถึงตําแหน่งในเบื้องหลังทำได้เฉพาะในการตั้งค่าแอปแทนกล่องโต้ตอบสิทธิ์รันไทม์
-
ระดับการเข้าถึงแพ็กเกจ: เมื่อแอปค้นหารายการแอปและบริการที่ติดตั้งในอุปกรณ์ ระบบจะกรองรายการที่แสดง
- หากใช้บริการการอ่านออกเสียงข้อความหรือ การจดจำคำพูด คุณจะต้องเพิ่มองค์ประกอบการค้นหาสำหรับบริการลงในไฟล์ Manifest
-
ความปลอดภัย
- ไม่รองรับไฟล์ `resource.arsc` ที่บีบอัดแล้วอีกต่อไป
- ตอนนี้ต้องใช้ APK Signature Scheme v2 นักพัฒนาแอปควรลงนามด้วย APK Signature Scheme v1 ต่อไปด้วยเพื่อเหตุผลด้านความเข้ากันได้แบบย้อนหลัง
- ข้อจำกัดของอินเทอร์เฟซที่ไม่ใช่ SDK ไม่แนะนำให้ใช้อินเทอร์เฟซที่ไม่ใช่ SDK สำหรับแอปที่กำหนดเป้าหมายเป็น API ระดับ 30 เนื่องจากตอนนี้อินเทอร์เฟซที่ไม่ใช่ SDK บางรายการถูกบล็อกแล้ว ดูรายการอินเทอร์เฟซที่ไม่ใช่ SDK ซึ่งถูกบล็อกใน Android 11 ได้ที่อินเทอร์เฟซที่ไม่ใช่ SDK ซึ่งตอนนี้ถูกบล็อกใน Android 11
ดูรายการการเปลี่ยนแปลงทั้งหมดที่เปิดตัวใน Android 11 (API ระดับ 30) ได้ที่หน้าการเปลี่ยนแปลงลักษณะการทํางาน
อัปเดตเป็น API 31 ต่อโดยทําตามวิธีการในส่วนก่อนหน้า
ปรับแอปให้ทันสมัย
ขณะที่คุณอัปเดตระดับ API เป้าหมายสำหรับแอป ลองพิจารณาการนำฟีเจอร์แพลตฟอร์ม ล่าสุดมาใช้เพื่อสร้างความทันสมัยให้แอปและสร้างความพึงพอใจให้กับผู้ใช้
- ลองใช้ CameraX ซึ่งอยู่ในรุ่นเบต้าเพื่อใช้ประโยชน์จากกล้องให้ได้มากที่สุด
- ใช้คอมโพเนนต์ Jetpack เพื่อช่วยคุณปฏิบัติตามแนวทางปฏิบัติแนะนำ ช่วยให้ไม่ต้องเขียนโค้ดที่ซ้ำกัน และลดความซับซ้อนของงานที่ยาก เพื่อให้คุณมุ่งเน้นที่โค้ดที่ต้องการได้
- ใช้ Kotlin เพื่อเขียนแอปที่ดีขึ้นได้เร็วขึ้นและใช้โค้ดน้อยลง
- ตรวจสอบว่าคุณปฏิบัติตามข้อกำหนดและแนวทางปฏิบัติแนะนำด้านความเป็นส่วนตัว
- เพิ่มการรองรับธีมมืดในแอป
- เพิ่มการรองรับการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัสลงในแอป
- ย้ายข้อมูลแอปจาก Google Cloud Messaging (GCM) ไปยัง Firebase Cloud Messaging เวอร์ชันล่าสุด
- ใช้ประโยชน์จากการจัดการหน้าต่างขั้นสูง
- รองรับสัดส่วนภาพที่กว้างขึ้น (มากกว่า 16:9) เพื่อใช้ประโยชน์จากฮาร์ดแวร์ขั้นสูงล่าสุด ตรวจสอบว่าแอปปรับขนาดให้เต็มพื้นที่หน้าจอ ประกาศสัดส่วนภาพสูงสุดเป็นทางเลือกสุดท้ายเท่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับสัดส่วนภาพสูงสุดได้ที่ประกาศการรองรับหน้าจอที่จำกัด
- เพิ่มการรองรับหลายหน้าต่างเพื่อช่วยเพิ่มประสิทธิภาพการทำงานของแอป และเพื่อจัดการจอแสดงผลหลายจอ
- หากประสบการณ์การใช้งานแอปแบบย่อหน้าจอที่ยอดเยี่ยมจะช่วยปรับปรุงประสบการณ์ของผู้ใช้ ให้เพิ่มการรองรับการแสดงภาพซ้อนภาพ
- เพิ่มประสิทธิภาพสำหรับอุปกรณ์ที่มีคัตเอาท์ดิสเพลย์
- อย่ากำหนดความสูงของแถบสถานะ แต่ให้ใช้
WindowInsets
และView.OnApplyWindowInsetsListener
แทน ดูคำอธิบายเพิ่มเติมได้ในวิดีโอ droidcon NYC 2017 - อย่าคิดว่าแอปมีหน้าต่างทั้งหน้าต่าง แต่ให้ยืนยันตำแหน่งโดยใช้
View.getLocationInWindow()
แทนView.getLocationOnScreen()
* เมื่อจัดการMotionEvent
ให้ใช้MotionEvent.getX()
และMotionEvent.getY()
ไม่ใช่MotionEvent.getRawX()
หรือMotionEvent.getRawY()
ตรวจสอบและอัปเดต SDK และคลัง
ตรวจสอบว่า SDK ของบุคคลที่สามที่อ้างอิงรองรับ API 31: ผู้ให้บริการ SDK บางรายเผยแพร่ข้อมูลไว้ในไฟล์ Manifest ส่วนผู้ให้บริการรายอื่นๆ จะต้องตรวจสอบเพิ่มเติม หากคุณใช้ SDK ที่ไม่รองรับ API 31 ให้ให้ความสําคัญกับการทำงานร่วมกับผู้ให้บริการ SDK เพื่อแก้ไขปัญหา
นอกจากนี้ โปรดทราบว่า targetSdkVersion
ของแอปหรือเกมอาจจํากัดการเข้าถึงไลบรารีแพลตฟอร์ม Android ส่วนตัว โปรดดูรายละเอียดที่หัวข้อการลิงก์แอป NDK กับไลบรารีแพลตฟอร์ม
นอกจากนี้ คุณควรตรวจสอบข้อจำกัดที่อาจมีอยู่ในเวอร์ชันของ Android Support Library ที่คุณใช้ด้วย คุณต้องตรวจสอบความเข้ากันได้ระหว่างไลบรารีสนับสนุนของ Android เวอร์ชันหลักกับ compileSdkVersion
ของแอป ดังเช่นเคย
เราขอแนะนำให้คุณเลือก targetSdkVersion
ที่น้อยกว่าหรือเท่ากับเวอร์ชันหลักของ Support Library เราขอแนะนำให้คุณอัปเดตเป็น
Support Library ที่เข้ากันได้ล่าสุดเพื่อใช้ประโยชน์จากฟีเจอร์
ความเข้ากันได้และการแก้ไขข้อบกพร่องล่าสุด
ทดสอบแอป
หลังจากอัปเดตระดับ API และฟีเจอร์ของแอปตามความเหมาะสมแล้ว คุณควรทดสอบ Use Case หลักบางอย่าง คำแนะนำต่อไปนี้เป็นเพียงตัวอย่างบางส่วนเท่านั้น แต่มีไว้เพื่อเป็นแนวทางในกระบวนการทดสอบ เราขอแนะนำให้คุณทดสอบรายการต่อไปนี้
- แอปของคุณคอมไพล์เป็น API ระดับ 29 โดยไม่มีข้อผิดพลาดหรือคำเตือน
แอปมีกลยุทธ์สำหรับกรณีที่ผู้ใช้ปฏิเสธคำขอสิทธิ์ และแจ้งให้ผู้ใช้ให้สิทธิ์ โดยทำดังนี้
- ไปที่หน้าข้อมูลแอปของแอปและปิดใช้สิทธิ์แต่ละสิทธิ์
- เปิดแอปและตรวจสอบว่าไม่มีข้อขัดข้อง
- ทำการทดสอบ Use Case หลักและตรวจสอบว่าระบบแสดงข้อความแจ้งให้ขอสิทธิ์ที่จำเป็นอีกครั้ง
จัดการ Doze ให้ได้ผลลัพธ์ที่คาดหวังและไม่มีข้อผิดพลาด
- ใช้ adb เพื่อทำให้อุปกรณ์ทดสอบเข้าสู่โหมดสลีปขณะที่แอปทำงานอยู่
- ทดสอบกรณีการใช้งานทั้งหมดที่กระตุ้นข้อความของ Firebase Cloud Messaging
- ทดสอบกรณีการใช้งานทั้งหมดที่ใช้ Alarms หรือ Google ค้นงาน
- ขจัดการพึ่งพาบริการในพื้นหลัง
- ตั้งค่าแอปให้อยู่ในโหมดสแตนด์บายแอป
- ทดสอบกรณีการใช้งานทั้งหมดที่กระตุ้นข้อความของ Firebase Cloud Messaging
- ทดสอบกรณีการใช้งานทั้งหมดที่ใช้ Alarms
- ใช้ adb เพื่อทำให้อุปกรณ์ทดสอบเข้าสู่โหมดสลีปขณะที่แอปทำงานอยู่
จัดการรูปภาพ/วิดีโอที่เพิ่งถ่าย/อัดใหม่
- ตรวจสอบว่าแอปจัดการการออกอากาศที่จำกัด
ACTION_NEW_PICTURE
และACTION_NEW_VIDEO
อย่างถูกต้อง (นั่นคือ ย้ายไปยังงาน JobScheduler) - ตรวจสอบว่า Use Case ที่สําคัญซึ่งอาศัยเหตุการณ์เหล่านี้ยังคงทํางานอยู่
- ตรวจสอบว่าแอปจัดการการออกอากาศที่จำกัด
จัดการการแชร์ไฟล์กับแอปอื่นๆ - ทดสอบ Use Case ที่แชร์ข้อมูลไฟล์กับแอปอื่น (แม้กระทั่งแอปอื่นของนักพัฒนาแอปรายเดียวกัน)
- ทดสอบว่าเนื้อหาปรากฏในแอปอื่นและไม่ทริกเกอร์ข้อขัดข้อง
ข้อมูลเพิ่มเติม
เลือกใช้อีเมลใน Google Play Console เพื่อให้เราส่งข้อมูลอัปเดตและประกาศสำคัญจาก Android และ Google Play รวมถึงจดหมายข่าวรายเดือนสำหรับพาร์ทเนอร์ให้คุณได้