ค้นหาเว็บไซต์

ทำไมแอป Android เดียวกันถึงทำงานแตกต่างกันบนโทรศัพท์เครื่องต่างๆ


ตอนนี้ฉันมีโทรศัพท์ Android สองเครื่องวางอยู่บนโต๊ะของฉัน ได้แก่ Google Pixel 9 และ OnePlus Open เมื่อไม่กี่วันที่ผ่านมา ฉันสังเกตว่าแจ้งเตือน Discord ปรากฏทันทีบน Pixel ของฉัน แต่กลับมาช้าบน OnePlus เป็นแอปเดียวกัน เวอร์ชันเดียวกัน ใช้เครือข่าย Wi-Fi เดียวกัน และบัญชี Discord เดียวกัน ฉันคิดว่ามันเป็นปัญหาของ Discord แต่ปรากฏว่าไม่ใช่ Discord เป็นเพียงหนึ่งในหลาย ๆ แอปที่ทำงานแตกต่างกันในโทรศัพท์ Android และมีหลายสาเหตุที่เป็นแบบนั้น

ฉันขุดลึกขึ้นเล็กน้อยเพื่อหาคำตอบ และนี่คือสิ่งที่ฉันค้นพบ

คุณอาจจะไม่ได้รัน APK เดียวกัน

วิธีที่กูเกิลปรับแต่งการติดตั้งแต่ละครั้งให้เหมาะกับอุปกรณ์

ตั้งแต่ปี 2021 เป็นต้นมา Google กำหนดให้แอปใหม่ทั้งหมดบน Play Store ต้องเผยแพร่ในรูปแบบ Android App Bundles (AABs) แทนไฟล์ APK แบบดั้งเดิม AABs ไม่ใช่ไฟล์ที่ติดตั้งได้ แต่เหมือนเป็นแบบร่างสำหรับไฟล์จริง เมื่อคุณกดติดตั้ง เซิร์ฟเวอร์ของ Google จะวิเคราะห์อุปกรณ์เฉพาะที่คุณใช้อยู่ (สถาปัตยกรรมซีพียู ความหนาแน่นของหน้าจอ การตั้งค่าภาษา ฯลฯ) และสร้าง APK แบบกำหนดเองเฉพาะสำหรับโทรศัพท์นั้น ๆ ระบบนี้เรียกว่า Dynamic Delivery

ดังนั้นถ้าฉันติดตั้งแอปแก้ไขรูปภาพบน Pixel ของฉันและ OnePlus Open ของฉัน ฉันจะไม่ได้ไฟล์เดียวกัน Google จะแบ่งแอปบันเดิลและส่งแพ็กเกจที่แตกต่างกันไปยังแต่ละโทรศัพท์ ทั้งสองอุปกรณ์ใช้ ARM ดังนั้นพวกเขาจะได้ไลบรารีเนทีฟที่สร้างขึ้นสำหรับชิปประเภทนั้น

แต่ GPU เป็นเรื่องที่ต่างออกไป: Tensor G4 ของ Pixel จับคู่กับ ARM Mali-G715 ขณะที่ Snapdragon 8 Gen 2 ของ OnePlus ใช้ Adreno 740 ของ Qualcomm สำหรับแอปที่ประกาศการรองรับการบีบอัดเท็กซ์เจอร์ OpenGL ใน manifest ของพวกเขา (ส่วนใหญ่เป็นเกม) Google Play สามารถส่งทรัพยากรที่แตกต่างกันไปยังแต่ละอุปกรณ์ตามสิ่งที่ GPU รองรับ

แม้ว่าความหนาแน่นของพิกเซลจะคล้ายกันทั้งสองอุปกรณ์ แต่ Google Play อาจโหลดทรัพยากรภาพที่แตกต่างกันตามหน้าจอที่ใหญ่ขึ้นบน OnePlus

กล่าวอีกนัยหนึ่ง “แอปเดียวกัน” ที่คุณใช้งานบนโทรศัพท์สองเครื่องต่างกันอาจมีโค้ดที่แตกต่างกันอย่างมีนัยสำคัญ นั่นเป็นการออกแบบโดยตรงและโดยทั่วไปถือว่าเป็นสิ่งที่ดีเพราะช่วยให้แอปโหลดได้เร็วขึ้นและใช้พื้นที่บนโทรศัพท์ของคุณน้อยกว่าที่เคย นอกจากนี้ยังหมายความว่าความแตกต่างในการทำงานจะถูกกำหนดไว้ตั้งแต่ก่อนที่คุณจะเปิดแอป

ด้วยโทรศัพท์ที่แตกต่างกันมากขึ้น ความแตกต่างของสถาปัตยกรรม CPU อาจมีนัยสำคัญ โทรศัพท์เครื่องหนึ่งอาจได้รับไลบรารีสำหรับการเร่งความเร็วฮาร์ดแวร์ซึ่งอีกเครื่องหนึ่งไม่รองรับ

ผู้ผลิตโทรศัพท์ยังเพิ่มชั้นอีกด้วย

การจัดการแบตเตอรี่ OEM เป็นตัวอย่างที่ดี

แม้ว่าสมาร์ทโฟนของคุณทั้งสองเครื่องจะได้รับไฟล์ APK ที่เหมือนกันโดยพื้นฐาน แต่ก็ยังอาจทำงานไม่เหมือนกัน นั่นเป็นเพราะว่า Android ไม่ใช่สิ่งที่เป็นเอกภาพหนึ่งเดียวจริงๆ Google เผยแพร่โครงการแอนดรอยด์แบบเปิด หรือ Android Open Source Project (AOSP) แล้วจากนั้นผู้ผลิต (OEM) เช่น Samsung, Xiaomi, OnePlus และ Oppo ก็จะนำพื้นฐานนั้นมาปรับแต่งเพิ่มเติมด้วยเลเยอร์ของตนเอง เช่น One UI, HyperOS, ColorOS เป็นต้น

หนึ่งในจุดที่ใหญ่ที่สุดที่สิ่งนี้สร้างความแตกต่างคือวิธีที่พวกเขาจัดการกับการจัดการกระบวนการพื้นหลัง

Google เปิดตัวโหมด Doze ใน Android 6.0 เพื่อจำกัดสิ่งที่แอปสามารถทำได้เมื่อโทรศัพท์ของคุณอยู่ในโหมดว่าง แต่ผู้ผลิตไม่จำเป็นต้องยึดติดเพียงแค่นั้น พวกเขาหลายรายสามารถวางนโยบายแบตเตอรี่ที่เข้มงวดยิ่งขึ้นเพิ่มเติมบนพื้นฐานของ Android ทำให้แอปเดียวกันสามารถทำงานแตกต่างกันอย่างสิ้นเชิงบนโทรศัพท์ต่างๆ

เว็บไซต์ Don't Kill My App ได้ติดตามปัญหานี้มาหลายปี ข้อมูลของพวกเขาชี้ให้เห็นว่าผู้ผลิตโทรศัพท์เช่น Samsung, OnePlus, Xiaomi, Huawei และ Oppo มีความเข้มงวดเป็นพิเศษ ตัวอย่างเช่น Samsung จะจำกัดการทำงานเบื้องหลังของแอปที่คุณไม่ได้เปิดเมื่อเร็ว ๆ นี้ ขณะที่ระบบอนุญาตการเริ่มต้นอัตโนมัติของ Xiaomi อาจบล็อกไม่ให้แอปเริ่มทำงานเลย

นักพัฒนาคนหนึ่งเขียนเกี่ยวกับแอปตรวจสอบความปลอดภัยที่เขาสร้างขึ้นซึ่งต้องทำงานตลอดวันและคืนบนโทรศัพท์ของผู้สูงอายุ แต่พบปัญหากับผู้ผลิตอุปกรณ์ต่าง ๆ ที่รีเซ็ตสิทธิ์ยกเว้นแบตเตอรี่หลังจากการอัปเดตซอฟต์แวร์ OTA ซึ่งหมายความว่าฟังก์ชันการทำงานจะหยุดทำงานทุกครั้งที่ผู้ใช้ทำการอัปเดตโทรศัพท์ของตน

ตามที่ Android Police รายงาน นักพัฒนาหลายคนสามารถระบุว่า OEM ใดกำลัง "ประพฤติผิด" เพียงแค่มองที่รีวิวใน Play Store ของพวกเขา นักพัฒนาสังเกตเห็นความคิดเห็นเชิงลบเกี่ยวกับฟีเจอร์ที่ขึ้นอยู่กับการทำงานเบื้องหลังมักจะรวมตัวกันรอบๆ แบรนด์โทรศัพท์เฉพาะ ซึ่งรวมถึงสิ่งต่างๆ เช่น การแจ้งเตือนล่าช้า, การพลาดสัญญาณนาฬิกาปลุก หรือแอปออกกำลังกายที่ไม่สามารถทำงานเบื้องหลังได้อีกต่อไป

นอกเหนือจากพฤติกรรมเบื้องหลังแล้ว บางฟีเจอร์ของแอปจะถูกส่งมอบแบบมีเงื่อนไขตามฮาร์ดแวร์ Google อนุญาตให้ผู้พัฒนาประกาศข้อกำหนดฮาร์ดแวร์ในไฟล์ manifest ของแอปของพวกเขา (เช่น NFC กล้องเฉพาะ หรือไจโรสโคป) หากโทรศัพท์ของคุณไม่มีฟีเจอร์นั้น แอปจะไม่สามารถติดตั้งได้ หรือหากติดตั้งได้ ฟีเจอร์เหล่านั้นจะถูกปิดใช้งาน

นักพัฒนาที่ใช้ Dynamic Delivery สามารถกำหนดโมดูลฟีเจอร์ หรือชิ้นส่วนของฟังก์ชันที่ดาวน์โหลดได้เฉพาะเมื่อมีเงื่อนไขบางอย่าง เช่น ปริมาณ RAM บนโทรศัพท์ของคุณ

สิ่งที่คุณสามารถทำได้จริงๆ เกี่ยวกับเรื่องนี้

เริ่มจากการตั้งค่าแบตเตอรี่ จากนั้นค่อยทำงานออกด้านนอก






บน OnePlus คุณสามารถไปที่ การตั้งค่า > แบตเตอรี่ > การปรับแต่งแบตเตอรี่ ค้นหาแอปของคุณ และตั้งค่าเป็น "ไม่ปรับแต่ง" นอกจากนี้ให้ตรวจสอบ การตั้งค่า > แอป > การเข้าถึงแอปพิเศษ > การเริ่มต้นอัตโนมัติ เพื่อให้แน่ใจว่าแอปได้รับอนุญาตให้เริ่มเอง สำหรับโทรศัพท์อื่น ๆ ให้ตรวจสอบเว็บไซต์ Don't Kill My App สำหรับคู่มือทีละขั้นตอนสำหรับผู้ผลิตรายใหญ่ทุกเจ้า

ถ้าไม่ใช่ปัญหานโยบายแบตเตอรี่ แสดงว่ามักจะทำอะไรได้น้อยลง: ฮาร์ดแวร์ที่หายไปก็คือฮาร์ดแวร์ที่หายไป หนึ่งในทางเลือกอาจเป็นการติดตั้ง APK สากลจากเว็บไซต์อย่าง APKMirror และดูว่าสามารถใช้งานได้หรือไม่

Android ยังค่อนข้างแยกออกเป็นส่วนๆ อยู่

Android ต้องทำงานบนอุปกรณ์หลายพันรุ่นจากผู้ผลิตหลายสิบราย ความจริงที่ว่าแอปส่วนใหญ่ทำงานได้ดีในทุกฮาร์ดแวร์นั้นน่าประทับใจจริงๆ ซึ่งก็หมายความด้วยว่า "แอปเดียวกัน" ในความเป็นจริงมักจะไม่ใช่แอปเดียวกัน Google Play ให้ไบนารีที่ปรับแต่งให้เหมาะกับ CPU หน้าจอ และภาษาของอุปกรณ์ของคุณ ในขณะที่ OEM ของคุณอาจเรียกใช้มาตรการจัดการแบตเตอรี่และกระบวนการเฉพาะตัวของตนเองบน Android นอกจากนี้ แอปเองอาจตัดสินใจในระหว่างรันไทม์ขึ้นอยู่กับ RAM หรือพลังประมวลผลที่ตรวจพบ นั่นคือจำนวนตัวแปรที่เยอะมาก

บทความที่เกี่ยวข้อง