Waydroid: Android ที่ทำงานในคอนเทนเนอร์ Linux
(waydro.id)- Waydroid เป็นโปรเจกต์ที่บูตระบบ Android ทั้งชุดเป็นคอนเทนเนอร์บนเดสก์ท็อป GNU/Linux ที่ใช้ Wayland ทำให้รันแอป Android ร่วมกับแอป Linux ได้เหมือนเป็นแอป Linux
- ใช้ Linux namespaces, LXC และอินเทอร์เฟซ binder เพื่อให้คอนเทนเนอร์ Android เข้าถึงฮาร์ดแวร์ที่จำเป็นได้โดยตรง และรองรับแพลตฟอร์ม GNU/Linux แบบ arm, arm64, x86, x86_64
- แอป Android สามารถผสานเข้าไปในโฟลเดอร์แอปพลิเคชันของ Linux ได้ และมีรูปแบบการรันตามสภาพแวดล้อมการใช้งาน เช่น Multi-Window Mode, Full UI Mode และ Fullscreen Mode
- รันไทม์ประกอบด้วยอิมเมจระบบ Android ที่ปรับแต่งให้น้อยที่สุดบนพื้นฐาน LineageOS โดยอิมเมจปัจจุบันอิง Android 13
- หลังติดตั้ง ต้องเริ่มบริการ waydroid-container แล้วเรียกใช้ตัวช่วยตั้งค่าครั้งแรกจากเมนูแอป และดิสโทร Waydroid-Linux Beta ทำงานในสภาพแวดล้อมที่ติดตั้งแล้ว ไม่ใช่ live mode
โครงสร้าง Android-on-Linux ของ Waydroid
- Waydroid ใช้วิธีบูตระบบ Android ทั้งชุดเป็นคอนเทนเนอร์ใน สภาพแวดล้อมเดสก์ท็อปที่ใช้ Wayland บนระบบ GNU/Linux ทั่วไป
- Android ภายในคอนเทนเนอร์ใช้ Linux namespaces
- user
- pid
- uts
- net
- mount
- ipc
- ระบบ Android เข้าถึงฮาร์ดแวร์ที่จำเป็นได้โดยตรงผ่าน LXC และอินเทอร์เฟซ binder
- แพลตฟอร์มที่รองรับคือ arm, arm64, x86, x86_64 บน GNU/Linux
- โปรเจกต์นี้เป็นโอเพนซอร์สฟรี และมีที่เก็บโค้ดอยู่บน GitHub
การผสานกับเดสก์ท็อปและโหมดการรัน
- แอป Android ทำงานบนเดสก์ท็อปเคียงข้างแอปพลิเคชัน Linux และ Waydroid จะเพิ่มแอป Android เข้าไปในโฟลเดอร์แอปพลิเคชันของ Linux
- โหมดการรันแบ่งตามรูปแบบการใช้งาน
- Multi-window mode: ขยายข้อกำหนด Android freeform window เพื่อเพิ่มฟังก์ชันหลายอย่าง
- Full UI Mode: แสดง UI Android แบบเต็ม สำหรับเกมและความบันเทิงแบบเต็มหน้าจอ
- สามารถใช้ Fullscreen Mode สำหรับเดสก์ท็อปและคีออสก์ได้
- ด้านประสิทธิภาพ ตั้งเป้าให้ทำงานใกล้เคียงเนทีฟมากที่สุดเท่าที่ทำได้ โดยใช้ Wayland และ AOSP mesa
- สภาพแวดล้อมรันไทม์ Android มาพร้อมอิมเมจระบบ Android ที่ปรับแต่งให้น้อยที่สุดบนพื้นฐาน LineageOS และอิมเมจปัจจุบันอิง Android 13
เอกสาร การติดตั้ง และ Waydroid-Linux Beta
- ดูเอกสารและการจัดการ issue ได้จากลิงก์แยกต่างหาก
- เอกสาร: docs.waydro.id
- รายงานบั๊ก: GitHub Repo
- ที่เก็บโค้ดพัฒนา: GitHub
- เอกสารการติดตั้งบนเดสก์ท็อป: installation docs
- ดาวน์โหลดอิมเมจด้วยตนเอง: SourceForge
- ขั้นตอนติดตั้งอย่างรวดเร็วสำหรับดิสโทรที่ใช้ systemd คือทำตามเอกสารติดตั้งของแต่ละดิสโทร จากนั้นหากบริการไม่ได้เริ่มอัตโนมัติ ให้เริ่มบริการ waydroid-container แล้วเปิด Waydroid จากเมนูแอปพลิเคชันเพื่อดำเนินตัวช่วยตั้งค่าครั้งแรก
- หากมีการร้องขอระหว่างการรันครั้งแรก ให้ป้อน System OTA และ Vendor OTA ด้วยลิงก์ OTA
- System OTA:
https://ota.waydro.id/system - Vendor OTA:
https://ota.waydro.id/vendor
- System OTA:
- Waydroid-Linux Beta คือดิสโทรที่ผสานรวมอย่างสมบูรณ์ ซึ่งสร้างขึ้นเพื่อแสดงให้เห็นความเป็นไปได้ในการผสานรวมที่ Waydroid สามารถทำได้
- รุ่น alpha แรกเริ่มจาก Ubuntu 20.04(focal)
- ปัจจุบันรวม Ubuntu 22.04(jammy) และ Debian 12(bookworm) ด้วย
- มีเครื่องมือและสคริปต์หลายอย่างเพื่อขยายขอบเขตงานที่ทำได้
- เนื่องจาก Waydroid ใช้ LXC และโมดูลเคอร์เนลสำหรับ binder Waydroid-Linux จึงไม่ทำงานใน live mode และต้องติดตั้งก่อนจึงจะทำงานได้ตามปกติ
- รายการดาวน์โหลด Beta กำหนดให้อ่าน README.md และมีรุ่นตัวอย่างให้ใช้ เช่น Ubuntu 22.04 KDE-Plasma, Ubuntu 22.04 Gnome, Debian 12 Beta, Ubuntu 21.10 Beta และรุ่น alpha ก่อนหน้า
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
แปลกใจที่เรื่องนี้ขึ้นหน้าแรก เพราะเป็นซอฟต์แวร์ที่ค่อนข้างเป็นที่รู้จักอยู่แล้ว
สิ่งที่น่าเสียดายคือไม่มี อิมเมจที่ Google จัดให้ ที่รันบน Waydroid เช่น อิมเมจระบบทั่วไป อะไรทำนองนั้น การกรอกรหัสผ่านลงใน ROM ใด ๆ ที่ดาวน์โหลดมาจากอินเทอร์เน็ตรู้สึกไม่ค่อยสบายใจ
https://source.android.com/docs/core/tests/vts/gsi
สำหรับโปรเจกต์อย่าง Waydroid ที่ต้องอาศัยการสนับสนุนจากชุมชนและการจัดส่งอย่างต่อเนื่อง นี่เป็นตัวเลือกที่เป็นธรรมชาติ Google ได้ค่อย ๆ ถอดส่วนที่เป็นเสรีและโอเพนซอร์สจำนวนมากซึ่งเดิมมีอยู่ใน AOSP ฐานของ Android ออกไปตลอดหลายปีที่ผ่านมา ทำให้โปรเจกต์อย่าง LineageOS ต้องพัฒนาคอมโพเนนต์ทดแทนเอง ถึงอย่างนั้น การแก้ไขที่ LineageOS ทำกับ AOSP ก็น่าจะน้อยกว่าผู้ผลิตโทรศัพท์ส่วนใหญ่ รวมถึง Google ด้วย
ถ้ามี Android แบบคอนเทนเนอร์ ที่เปิดบน Mac ได้ด้วย Docker Desktop หรือ OrbStack ก็คงดี
อยากแก้ Docker image เพื่อตั้งค่า man-in-the-middle proxy ที่รูทไว้ล่วงหน้า แล้วเอาแอป Android ขึ้นไป เพื่อสังเกตทราฟฟิกเครือข่ายและ API call ได้ง่ายขึ้นมาก
sudo ip netns exec wiresharkนี่เป็นพื้นฐานที่ FuriLabs ใช้ทำการผสานรวมแอป Android ได้ดี แน่นอนว่าพวกเขาฟอร์กไป [0] และปรับแก้ไปมาก แต่ ประสบการณ์ผู้ใช้ ที่ทำให้ใช้แอป Android บนโทรศัพท์ Linux ได้นั้นยอดเยี่ยมมาก
[0] https://github.com/FuriLabs/waydroid
Furiphone FLX1 ใช้สิ่งนี้อย่างจริงจัง และดีมากจริง ๆ ทำสิ่งส่วนใหญ่ที่อยากทำบนโทรศัพท์ Android จริง ๆ ได้
แน่นอนว่าสิ่งที่ฉันต้องการมีไม่มากนัก แต่ก็รู้จักคนที่ใช้กับ Signal และ Spotify อยู่ เป็นโปรเจกต์ที่ยอดเยี่ยมและเหมาะกับโทรศัพท์ Linux มาก
สุดท้ายคงต้องพกโทรศัพท์สองเครื่อง แอปธนาคารและบัตรเครดิตเป็นแอปจำเป็นที่ต้องใช้ทุกวัน และบางบัญชีแม้แต่บนเบราว์เซอร์เดสก์ท็อปก็ยังล็อกอินไม่ได้ถ้าไม่มีการยืนยันผ่านแอปมือถือ การชำระเงินแต่ละรายการก็มักต้องยืนยันผ่านแอปมือถือด้วย ไม่ได้อยู่ในสถานการณ์ที่จะเปลี่ยนบัญชีเพื่อประสบการณ์ผู้ใช้ที่เสรีกว่านี้ได้
นอกจากเรื่องการเงินแล้ว งานหลักก็ต้องใช้ชุดผลิตภัณฑ์ของ Google และอีกงานหนึ่งก็ต้องใช้ Discord ด้วย อันนี้น่าจะใช้ผ่านเบราว์เซอร์ได้แม้ฟีเจอร์จะลดลง แต่แอปธนาคารและบัตรเครดิตทำแบบนั้นไม่ได้
นี่ไม่ใช่การบ่น Waydroid หรือ FLX1 และผมชื่นชมงานกับความคิดสร้างสรรค์นั้น ผมฝันมานานว่าจะได้เป็นเจ้าของและสร้างโทรศัพท์เสรีและโอเพนซอร์สเต็มรูปแบบเอง และก็รู้ปริมาณงานที่ต้องทำด้วย เมื่อก่อนเคยใช้ Nokia N900 สองเครื่องด้วย
เพียงแต่ยุคสมัยเปลี่ยนไปแล้ว และหวังว่าจะหาวิธีรันแอปหรือโปรโตคอลที่ชีวิตประจำวันทุกวันนี้ต้องใช้ บนระบบฐานเสรีและโอเพนซอร์ส หรือรันเคียงข้างกันได้
แต่การไม่มีจอ OLED อาจเป็นข้อเสียเด็ดขาดได้
มีแอปสามตัวที่ซื้อไว้นานแล้ว เป็นพจนานุกรมสวีเดน พจนานุกรมเยอรมัน-สวีเดน และพจนานุกรมอังกฤษ-สวีเดน
ยังติดตั้งได้อยู่ แต่ไม่มีให้ใน app store แล้ว บริษัท Norstedts แน่นอนว่าเปลี่ยนไปใช้โมเดล subscription แล้ว ฉันใช้ Waydroid เพื่อใช้แอปเหล่านี้บนเดสก์ท็อป และพอใจมาก
แอปจำนวนมากพึ่งพาการรันบน Android distribution “ทางการ” อย่างของ Google, Samsung และไม่ทำงานบน distribution ฐาน Lineage ของ Waydroid
แนวทางแบบ Wine อย่าง https://gitlab.com/android_translation_layer/android_transla... น่าจะช่วยหลอกแอปได้ว่ากำลังรันอยู่บน Android distribution “ทางการ”
แนวทางแบบ Wine ของ ATL นั้นดูตรงไปตรงมากว่าอย่างชัดเจนสำหรับการเลียนแบบ API แต่ก็ยังต้องมีการ reimplement แยกสำหรับ ATL อยู่ดี ในทางกลับกัน Waydroid รันสภาพแวดล้อม Android ทั้งชุด จึงมีความเป็นไปได้ที่จะนำ Magisk หรือ microG กลับมาใช้ได้
ทุกครั้งที่เห็นสิ่งนี้ ผมจะคิดว่า “เจ๋งดี! คงเอาไว้รันแอป Android เจ๋ง ๆ ที่ไม่มีแอปรองรับบน Linux ได้” แต่ทุกครั้งก็นึกไม่ออก มี แอป Android อะไรที่จำเป็นต้องมีจริง ๆ ไหม?
Organic Maps มีเวอร์ชันเดสก์ท็อป Linux แต่ความเท่าเทียมของฟีเจอร์ยังอีกไกล อย่างไรก็ตามอาจเปลี่ยนได้ด้วยทุนสนับสนุนนี้ [1] ที่มุ่งทำเดสก์ท็อป UI ดี ๆ สำหรับ Organic Maps
[1] https://nlnet.nl/project/OrganicMaps-ConvergentUI/
คอนเทนเนอร์นี้เข้าถึงอุปกรณ์ฮาร์ดแวร์ USB ได้ไหม? ผมมี สาย Moondrop FreeDSP USB-C ที่มี PEQ อยู่ในตัว แต่มันใช้ได้เฉพาะกับแอป Android ห่วย ๆ เท่านั้น
แท็บเล็ต Android ที่มีอยู่ก็ทัชสกรีนแย่ด้วย เลยใช้เวลานานเกินไปกว่าจะเปลี่ยนการตั้งค่า EQ ได้ อยากทำจากแล็ปท็อป Linux มากกว่า
ต่อให้ไม่ใช่แบบนั้น สุดท้ายมันก็เป็นคอนเทนเนอร์ Linux ดังนั้นถ้าใช้กฎ udev นิดหน่อยก็น่าจะทำให้ใช้งานได้อยู่ดี
มีบางอย่างที่ดูเหมือนจะขาดหายไปเรื่อย ๆ ในโปรเจ็กต์แบบนี้ ส่วนที่ยังไม่พอคือการใช้ การเร่งความเร็ว 3D ด้วยฮาร์ดแวร์ ของโฮสต์กับเวอร์ชัน OpenGL ES และ Vulkan ที่โทรศัพท์ส่วนใหญ่รองรับเป็นค่าเริ่มต้น
อีกอย่าง แอปจำนวนมากมีวิธีในตัวเพื่อตรวจจับว่ามันไม่ได้รันอยู่บนโทรศัพท์ และจะดู cpuinfo เทียบกับอุปกรณ์ที่อ้างว่าเป็น แล้วปิดตัวลง
การรองรับ ARM ที่อุปกรณ์คาดหวังก็เพิ่มขึ้นเรื่อย ๆ และปริมาณงานที่คาดหวังก็สูงขึ้นตามไปด้วย ดังนั้นประสิทธิภาพของโฮสต์ x86 ที่ต้องใช้เพื่ออีมูเลตแม้แต่ mobile ARM SoC รุ่นใหม่ทั่วไปก็ยิ่งสูงขึ้นเรื่อย ๆ
สุดท้าย เวอร์ชัน Android ที่รองรับแทบจะล้าหลังกว่ารุ่นล่าสุดอยู่ 3–4 เจเนอเรชันเสมอ แอปต่าง ๆ เลิกรองรับ Android เก่าอย่างรวดเร็ว หรือไม่ก็รันบน OS รุ่นเก่าด้วยฟีเจอร์และการปรับแต่งที่น้อยกว่า เวอร์ชันฐาน Android ของโปรเจ็กต์นี้เป็นของปี 2020
จากประสบการณ์ส่วนตัว แม้แต่ BlueStacks ซึ่งมีสแตกอีมูเลชันที่เข้ากันได้และปรับแต่งดีที่สุดในสายนี้ พอรันบน 7800X3D / RTX 3090 เกมส่วนใหญ่ก็ยังช้ากว่าการรันแบบเนทีฟบนมือถือ Snapdragon 8 ของปีที่แล้ว
virtio-gpu-rutabaga: https://www.qemu.org/docs/master/system/devices/virtio-gpu.h...
Rutabaga Virtual Graphics Interface: https://crosvm.dev/book/appendix/rutabaga_gfx.html
gfxstream: https://android.googlesource.com/platform/hardware/google/gf...
“Gfxstream Merged Into Mesa For Vulkan Virtualization” (2024-09)
https://www.phoronix.com/news/Mesa-Gfxstream-Merged
ไม่รู้ว่าทำไมถึงไม่มีคอนเทนเนอร์หรือ ROM x86 อย่างเป็นทางการสำหรับการพัฒนา Android การ build CI ของแอป Android ไม่ได้รันทดสอบบน Android เวอร์ชันล่าสุดกันหรือ? สงสัยว่า build CI ของ APK รันการทดสอบ GUI โดยไม่มีคอนเทนเนอร์ Android ได้อย่างไร
สิ่งที่น่าประหลาดใจคือไม่มีใครทำ abstraction ให้รันคอนเทนเนอร์ Android หลายตัวใต้ LXC ได้
ใน Waydroid มีอิมเมจเดียวเท่านั้น เท่าที่ผมดู มันเหมือนใช้เคอร์เนล Linux แบบคัสตอมที่มีแพตช์เยอะ และผมก็ไม่ได้เข้าใจถ่องแท้ แต่ฝั่งอินเทอร์เฟซ LXC ดูค่อนข้างเรียบง่าย