Android chạy trong container Linux, Waydroid
(waydro.id)- Waydroid là dự án khởi động toàn bộ hệ thống Android dưới dạng container trên desktop GNU/Linux dựa trên Wayland, cho phép chạy ứng dụng Android cùng với ứng dụng Linux như thể chúng là ứng dụng Linux
- Sử dụng Linux namespace, LXC và giao diện binder để container Android truy cập trực tiếp phần cứng cần thiết; hỗ trợ các nền tảng GNU/Linux arm, arm64, x86, x86_64
- Ứng dụng Android có thể được tích hợp vào thư mục ứng dụng Linux, đồng thời cung cấp các cách chạy theo từng môi trường sử dụng như Multi-Window Mode, Full UI Mode, Fullscreen Mode
- Runtime gồm image hệ thống Android được tùy biến tối thiểu dựa trên LineageOS; image hiện tại dựa trên Android 13
- Sau khi cài đặt, cần khởi động dịch vụ waydroid-container và chạy trình hướng dẫn lần đầu từ menu ứng dụng; bản phân phối beta Waydroid-Linux hoạt động trong môi trường đã cài đặt, không phải live mode
Kiến trúc Android-on-Linux của Waydroid
- Waydroid sử dụng cách khởi động toàn bộ hệ thống Android dưới dạng container trong môi trường desktop dựa trên Wayland của một hệ thống GNU/Linux thông thường
- Android bên trong container sử dụng Linux namespace
- user
- pid
- uts
- net
- mount
- ipc
- Hệ thống Android truy cập trực tiếp phần cứng cần thiết thông qua LXC và giao diện binder
- Các nền tảng được hỗ trợ là arm, arm64, x86, x86_64 dựa trên GNU/Linux
- Dự án là mã nguồn mở miễn phí và kho lưu trữ nằm trên GitHub
Tích hợp desktop và chế độ chạy
- Ứng dụng Android chạy trên desktop song song với ứng dụng Linux, và Waydroid thêm ứng dụng Android vào thư mục ứng dụng Linux
- Chế độ chạy được chia theo cách sử dụng
- Multi-window mode: mở rộng định nghĩa Android freeform window để thêm nhiều chức năng
- Full UI Mode: hiển thị toàn bộ UI Android cho game và giải trí toàn màn hình
- Có thể sử dụng Fullscreen Mode cho desktop/kiosk
- Về hiệu năng, Waydroid hướng tới hoạt động gần native nhất có thể bằng cách dùng Wayland và AOSP mesa
- Môi trường runtime Android được cung cấp cùng image hệ thống Android tùy biến tối thiểu dựa trên LineageOS, và image hiện tại dựa trên Android 13
Tài liệu, cài đặt và Waydroid-Linux beta
- Có thể xem tài liệu và quản lý issue tại các liên kết riêng
- Tài liệu: docs.waydro.id
- Báo cáo lỗi: GitHub Repo
- Kho phát triển: GitHub
- Tài liệu cài đặt trên desktop: installation docs
- Tải image thủ công: SourceForge
- Quy trình cài đặt nhanh trên các bản phân phối systemd là làm theo tài liệu cài đặt theo từng bản phân phối; sau đó, nếu chưa tự khởi động, hãy khởi động dịch vụ waydroid-container và chạy Waydroid từ menu ứng dụng để thực hiện trình hướng dẫn lần đầu
- Nếu được yêu cầu trong lần chạy đầu tiên, nhập System OTA và Vendor OTA bằng các liên kết OTA
- System OTA:
https://ota.waydro.id/system - Vendor OTA:
https://ota.waydro.id/vendor
- System OTA:
- Waydroid-Linux Beta là các bản phân phối tích hợp hoàn chỉnh được tạo ra để cho thấy những khả năng tích hợp mà Waydroid có thể triển khai
- Bản phát hành alpha đầu tiên bắt đầu từ Ubuntu 20.04(focal)
- Hiện cũng bao gồm Ubuntu 22.04(jammy) và Debian 12(bookworm)
- Bao gồm nhiều công cụ và script để mở rộng phạm vi tác vụ có thể thực hiện
- Vì Waydroid sử dụng LXC và các kernel module cho binder, Waydroid-Linux không hoạt động ở live mode; cần cài đặt để hoạt động bình thường
- Các mục tải xuống beta yêu cầu xem README.md, và các bản phát hành ví dụ gồm Ubuntu 22.04 KDE-Plasma, Ubuntu 22.04 Gnome, Debian 12 Beta, Ubuntu 21.10 Beta và các bản alpha cũ hơn
1 bình luận
Ý kiến trên Hacker News
Tôi khá bất ngờ khi cái này lên trang nhất. Vì đây là phần mềm khá nổi tiếng
Điều đáng tiếc là Waydroid không có image do Google cung cấp để chạy. Chẳng hạn như image hệ thống chung. Nhập mật khẩu vào một ROM tùy ý tải từ Internet khiến tôi thấy không yên tâm
https://source.android.com/docs/core/tests/vts/gsi
Với một dự án như Waydroid, cần sự hỗ trợ cộng đồng và phát hành liên tục, đây là lựa chọn tự nhiên. Google trong nhiều năm qua đã liên tục loại bỏ nhiều phần tự do và mã nguồn mở vốn có trong AOSP, nền tảng của Android, nên các dự án như LineageOS đã phải phát triển các thành phần thay thế. Dù vậy, tôi nghĩ các chỉnh sửa mà LineageOS áp lên AOSP vẫn ít hơn hầu hết các nhà sản xuất điện thoại, kể cả Google
Sẽ rất hay nếu có một Android được container hóa có thể chạy trên Mac bằng những thứ như Docker Desktop hoặc OrbStack
Tôi muốn chỉnh sửa Docker image để thiết lập sẵn proxy trung gian đã root, rồi đưa ứng dụng Android lên đó để quan sát lưu lượng mạng và các lệnh gọi API dễ dàng hơn nhiều
sudo ip netns exec wiresharkĐây là nền tảng giúp FuriLabs làm tốt phần tích hợp ứng dụng Android. Tất nhiên họ đã fork và chỉnh sửa đáng kể [0], nhưng trải nghiệm người dùng cho phép dùng ứng dụng Android trên điện thoại Linux là rất tuyệt
[0] https://github.com/FuriLabs/waydroid
Furiphone FLX1 đang tận dụng cái này rất tích cực và thật sự rất tốt. Nó làm được hầu hết những việc mà tôi muốn làm với một chiếc điện thoại Android thật sự
Tất nhiên nhu cầu của tôi không nhiều, nhưng tôi cũng biết những người dùng nó cho Signal và Spotify. Đây là một dự án tuyệt vời và rất hợp với điện thoại Linux
Cuối cùng có lẽ tôi vẫn phải mang theo hai điện thoại. Ứng dụng ngân hàng và thẻ tín dụng là các ứng dụng thiết yếu cần hằng ngày, và với một số tài khoản, tôi thậm chí không thể đăng nhập từ trình duyệt desktop nếu không xác thực bằng ứng dụng điện thoại. Các khoản thanh toán riêng lẻ cũng thường cần xác nhận qua ứng dụng điện thoại. Tôi cũng không ở trong tình thế có thể đổi ngân hàng để có trải nghiệm người dùng tự do hơn
Ngoài tài chính, công việc chính của tôi bắt buộc dùng bộ sản phẩm Google, còn ở việc khác tôi cũng phải dùng Discord. Những thứ này có lẽ dùng qua trình duyệt được dù bị giảm chức năng, nhưng ứng dụng ngân hàng và thẻ tín dụng thì không
Đây không phải là phàn nàn về Waydroid hay FLX1; tôi rất trân trọng công sức và sự sáng tạo đó. Tôi đã mơ từ lâu về việc sở hữu và tự làm một chiếc điện thoại hoàn toàn tự do và mã nguồn mở, và cũng biết khối lượng công việc cần bỏ ra. Trước đây tôi từng dùng hai chiếc Nokia N900
Chỉ là thời thế đã thay đổi, và tôi hy vọng sẽ tìm được cách chạy các ứng dụng hoặc giao thức mà đời sống hằng ngày hiện nay đòi hỏi trên hoặc song song với một hệ thống dựa trên phần mềm tự do và mã nguồn mở
Tuy nhiên việc không có tấm nền OLED có thể là nhược điểm chí mạng
Tôi có ba ứng dụng đã mua từ rất lâu. Một từ điển tiếng Thụy Điển, một từ điển Đức-Thụy Điển, và một từ điển Anh-Thụy Điển
Tôi vẫn có thể cài chúng, nhưng chúng không còn được cung cấp trên app store nữa. Công ty Norstedts thì tất nhiên đã chuyển sang mô hình đăng ký thuê bao. Tôi dùng Waydroid để dùng các ứng dụng này trên desktop và rất hài lòng
Nhiều ứng dụng phụ thuộc vào việc được chạy trên bản phân phối Android “chính thức” như của Google, Samsung, và không hoạt động trên bản phân phối dựa trên Lineage của Waydroid
Một cách tiếp cận kiểu Wine như https://gitlab.com/android_translation_layer/android_transla... có vẻ có thể giúp đánh lừa ứng dụng rằng nó đang chạy trên một bản phân phối Android “chính thức”
Cách tiếp cận kiểu Wine của ATL chắc chắn trực quan hơn để mô phỏng API, nhưng vẫn cần tái triển khai riêng cho ATL. Trong khi đó, Waydroid chạy cả một môi trường Android đầy đủ, nên có khả năng tái sử dụng Magisk hoặc microG
Mỗi lần thấy cái này tôi đều nghĩ “Hay đấy! Có thể chạy được những ứng dụng Android tuyệt vời mà không có bản cho Linux”, nhưng lần nào cũng chẳng nghĩ ra được gì. Có ứng dụng Android nào thật sự cần phải có không?
Organic Maps có phiên bản desktop Linux, nhưng còn lâu mới tương đương về tính năng. Tuy vậy, điều này có thể thay đổi nhờ khoản tài trợ này [1] nhằm tạo một UI desktop tốt cho Organic Maps
[1] https://nlnet.nl/project/OrganicMaps-ConvergentUI/
Container này có thể truy cập thiết bị USB phần cứng không? Tôi có một cáp Moondrop FreeDSP USB-C có PEQ, nhưng nó chỉ hoạt động với một app Android tệ hại
Chiếc tablet Android tôi có cũng có màn hình cảm ứng quá tệ, nên đổi thiết lập EQ mất quá nhiều thời gian. Tôi chỉ muốn làm việc đó bằng laptop Linux
Kể cả không phải vậy thì rốt cuộc nó vẫn là Linux container, nên với một ít rule udev chắc cũng có thể làm cho nó hoạt động bằng cách nào đó
Có vài thứ dường như cứ bị thiếu trong các dự án kiểu này. Phần dùng tăng tốc 3D phần cứng của host với các phiên bản OpenGL ES và Vulkan mà hầu hết điện thoại hỗ trợ mặc định còn thiếu
Ngoài ra, nhiều app có cơ chế tích hợp để phát hiện rằng chúng không chạy trên điện thoại, kiểm tra cpuinfo rồi đối chiếu với thiết bị được khai báo và thoát luôn
Mức hỗ trợ ARM mà thiết bị kỳ vọng cũng ngày càng tăng, và throughput kỳ vọng cũng tăng theo. Vì vậy, để mô phỏng ngay cả một SoC ARM di động hiện đại bình thường, hiệu năng host x86 cần thiết cũng ngày càng cao
Cuối cùng, phiên bản Android được hỗ trợ gần như luôn tụt sau bản mới nhất 3–4 thế hệ. Các app nhanh chóng ngừng hỗ trợ Android cũ, hoặc chạy trên OS cũ với ít tính năng và tối ưu hơn. Phiên bản nền Android của dự án này là từ năm 2020
Theo giai thoại, ngay cả BlueStacks, vốn có stack mô phỏng tương thích và tối ưu nhất trong lĩnh vực này, khi chạy trên 7800X3D / RTX 3090 thì phần lớn game vẫn chậm hơn chạy native trên điện thoại Snapdragon 8 năm ngoái
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
Tôi không hiểu vì sao không có container hay ROM x86 chính thức cho phát triển Android. Các build CI của ứng dụng Android không chạy test trên phiên bản Android mới nhất sao? Tôi cũng tò mò các build CI của APK chạy GUI test thế nào nếu không có container Android
Điều đáng ngạc nhiên là chưa có ai trừu tượng hóa cái này để có thể chạy nhiều container Android dưới LXC
Waydroid chỉ có một image. Theo tôi nhìn thì dường như nó dùng một Linux kernel tùy biến được patch khá nhiều, tôi chưa nắm rõ, nhưng phía giao diện LXC trông khá đơn giản