โทรศัพท์ Android ส่วนใหญ่มีชิปเซ็ต ARM อย่างไรก็ตาม อุปกรณ์ ChromeOS หลายรุ่นใช้ชิป x86 ความแตกต่างนี้ไม่มีผลต่อแอปที่เขียนด้วย Kotlin หรือ Java อย่างไรก็ตาม สำหรับแอปที่เขียนใน Android NDK รวมถึงแอปที่สร้างด้วยเอนจินเกม ชิปเซ็ตในอุปกรณ์อาจเป็นข้อกังวลที่สำคัญ
ในอุดมคติแล้ว แอปทั้งหมดที่มีโค้ด Android NDK ควรจัดส่งพร้อมกับ ABI (Application Binary Interface) หลักทั้ง 4 รายการของ Android ได้แก่ armeabi-v7a (arm32), arm64-v8a (arm64), x86 (x86_32) และ x86_64
ซึ่งจะช่วยให้แต่ละอุปกรณ์มีประสิทธิภาพดีที่สุดและใช้แบตเตอรี่น้อยที่สุด เช่น ไฟล์ build.gradle ที่ใช้ CMake อาจมีข้อมูลต่อไปนี้
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}ขนาด APK
ABI แต่ละรายการใน APK แบบ Monolithic จะเพิ่มขนาดของ APK ซึ่งอาจส่งผลต่อการใช้ดิสก์ของผู้ใช้ ขนาดการดาวน์โหลดแอป และอาจมีขนาดเกินขีดจำกัดของ Play Store วิธีที่ดีที่สุดในการหลีกเลี่ยงปัญหานี้คือการใช้ Android App Bundle App Bundle ช่วยให้คุณจัดกลุ่ม ABI ทั้ง 4 รายการจากภายใน Android Studio ได้อย่างง่ายดาย แต่จะไม่เพิ่มขนาดการดาวน์โหลดสำหรับผู้ใช้ นอกจากนี้ยังช่วยให้ใช้ประโยชน์จากการนำส่งแบบไดนามิกได้ง่ายขึ้น ซึ่งช่วยให้ผู้ใช้ดาวน์โหลดเนื้อหาเกมขนาดใหญ่ได้เฉพาะเมื่อมีการขอเท่านั้น หากใช้ App Bundle ไม่ได้ คุณสามารถใช้ multi-APK เวอร์ชันเก่าเพื่อสร้างลักษณะการทำงานที่คล้ายกันได้
32 บิตเทียบกับ 64 บิต
แอป Android ทั้งหมดต้องมีเวอร์ชันบิลด์ 64 บิต บิลด์ 32 บิตเป็นตัวเลือกสำหรับทั้งอุปกรณ์ ARM และ x86 ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบสำหรับ Android 64 บิต
แม้ว่าการระบุเฉพาะบิลด์ 64 บิตจะช่วยลดจำนวนเป้าหมายบิลด์ที่จำเป็นและพื้นผิวการทดสอบของคุณ แต่ก็จำกัดประเภทอุปกรณ์ที่สามารถเรียกใช้เกมของคุณได้ด้วย ตัวอย่างเช่น Chromebook รุ่นเก่าหลายรุ่นใช้ได้เฉพาะแอป Android แบบ 32 บิตเท่านั้น แม้ว่าจะมี CPU แบบ 64 บิตก็ตาม เนื่องจากข้อจำกัดด้านฮาร์ดแวร์อื่นๆ โปรดรวมการรองรับทั้ง 32 บิตและ 64 บิตเพื่อให้มั่นใจว่าแอปจะทำงานบนอุปกรณ์เหล่านี้ได้
หมายเหตุ: แอปใหม่และแอปที่อัปเดตทั้งหมดจะต้องมีเวอร์ชันแอป 64 บิต Play Store หยุดให้บริการแอป 32 บิตในอุปกรณ์ที่รองรับ 64 บิตแล้ว Chromebook หลายรุ่นรองรับ 64 บิต และเราขอแนะนำให้อัปเดตแอปโดยเร็วที่สุดเพื่อรวมเวอร์ชัน 64 บิตไว้ด้วย เพื่อให้ผู้ใช้แอปใน ChromeOS ใช้งานแอปได้อย่างต่อเนื่อง
การแปล ARM
Chromebook ที่ใช้ x86 จะพยายามแปลโค้ด ARM ทุกครั้งที่ทำได้ อย่างไรก็ตาม การแปลจะทำให้ประสิทธิภาพช้าลงและเพิ่มการใช้งานแบตเตอรี่ แม้แต่เกมที่เรียบง่ายก็ควรพิจารณาจัดทำบิลด์ x86 เพื่อมอบประสบการณ์การใช้งานที่ดีที่สุด หากคุณไม่สามารถระบุบิลด์ x86 โปรดทราบว่า Chromebook x86 บางรุ่นไม่สามารถแปลโค้ด arm64 ได้ ในกรณีนี้ คุณควรใส่ทั้ง ABI ของ arm32 และ arm64 ในบิลด์
แม้ว่าการแปล arm32 จะพร้อมใช้งานใน Chromebook ทุกเครื่องที่ใช้ Android ได้ แต่ Chromebook บางเครื่องก็แปลโค้ด arm64 ไม่ได้ ซึ่งหมายความว่าหากเกมของคุณมีเป้าหมายการสร้าง arm64 เท่านั้น เกมจะใช้งานในอุปกรณ์ ChromeOS จำนวนมากไม่ได้ หากจัดส่งไบนารี x86 ไม่ได้ ให้รวมทั้ง ABI arm32 และ arm64 ไว้ในการสร้าง
| ABI ที่รวมไว้ | การสนับสนุนสำหรับ ChromeOS |
|---|---|
arm64 | แย่ |
arm32/arm64 | ตกลง (พร้อมคำแปล) |
arm32/arm64/x86_32/x86_64 | ดีที่สุด |