Linux konteynerlerinde çalışan Android: Waydroid
(waydro.id)- Waydroid, Wayland tabanlı GNU/Linux masaüstlerinde tam bir Android sistemini konteyner olarak başlatıp Android uygulamalarını Linux uygulamaları gibi yan yana çalıştırmayı sağlayan bir projedir
- Linux namespace’leri, LXC ve binder arayüzünü kullanarak Android konteynerinin ihtiyaç duyduğu donanıma doğrudan erişmesini sağlar; arm, arm64, x86, x86_64 GNU/Linux platformlarını destekler
- Android uygulamaları Linux uygulama klasörüne entegre edilebilir ve Multi-Window Mode, Full UI Mode, Fullscreen Mode gibi kullanım ortamına göre farklı çalıştırma biçimleri sunar
- Çalışma zamanı, LineageOS tabanlı, minimum düzeyde özelleştirilmiş bir Android sistem imajından oluşur; mevcut imaj Android 13 tabanlıdır
- Kurulumdan sonra waydroid-container servisini başlatmak ve uygulama menüsünden ilk çalıştırma sihirbazını tamamlamak gerekir; Waydroid-Linux beta dağıtımı live mode’da değil, kurulu ortamda çalışır
Waydroid’in Android-on-Linux mimarisi
- Waydroid, standart bir GNU/Linux sistemindeki Wayland tabanlı masaüstü ortamında tam bir Android sistemini konteyner olarak başlatma yaklaşımını kullanır
- Konteyner içindeki Android, Linux namespace’lerini kullanır
- user
- pid
- uts
- net
- mount
- ipc
- Android sistemi, LXC ve binder arayüzü üzerinden ihtiyaç duyduğu donanıma doğrudan erişir
- Desteklenen platformlar GNU/Linux tabanlı arm, arm64, x86, x86_64’tür
- Proje ücretsiz ve açık kaynaklıdır; deposu GitHub üzerindedir
Masaüstü entegrasyonu ve çalıştırma modları
- Android uygulamaları masaüstünde Linux uygulamalarıyla yan yana çalışır; Waydroid, Android uygulamalarını Linux uygulama klasörüne ekler
- Çalıştırma modları kullanım biçimine göre ayrılır
- Multi-window mode: Android freeform window tanımını genişleterek çeşitli işlevler ekler
- Full UI Mode: Oyunlar ve tam ekran eğlence kullanımları için tam Android arayüzünü gösterir
- Masaüstü ve kiosk kullanımı için Fullscreen Mode kullanılabilir
- Performans tarafında Wayland ve AOSP mesa kullanarak mümkün olduğunca yerel çalışmaya yakın bir deneyim hedefler
- Android çalışma zamanı ortamı, LineageOS tabanlı, minimum düzeyde özelleştirilmiş bir Android sistem imajıyla birlikte sunulur; mevcut imaj Android 13 tabanlıdır
Dokümantasyon, kurulum ve Waydroid-Linux beta
- Dokümantasyon ve sorun takibi ayrı bağlantılardan görülebilir
- Dokümantasyon: docs.waydro.id
- Hata raporu: GitHub Repo
- Geliştirme deposu: GitHub
- Masaüstü kurulum dokümantasyonu: installation docs
- Manuel imaj indirme: SourceForge
- systemd tabanlı dağıtımlarda hızlı kurulum akışı, dağıtıma özel kurulum dokümantasyonunu izledikten sonra, otomatik başlamadıysa waydroid-container servisini başlatıp uygulama menüsünden Waydroid’i çalıştırarak ilk çalıştırma sihirbazını tamamlamaktır
- İlk çalıştırma sırasında istenirse System OTA ve Vendor OTA alanlarına OTA bağlantıları girilir
- System OTA:
https://ota.waydro.id/system - Vendor OTA:
https://ota.waydro.id/vendor
- System OTA:
- Waydroid-Linux Beta, Waydroid’in sağlayabileceği entegrasyon olasılıklarını göstermek için hazırlanmış, tamamen entegre dağıtımlardan oluşur
- İlk alfa sürümü Ubuntu 20.04 (focal) ile başladı
- Şu anda Ubuntu 22.04 (jammy) ve Debian 12 (bookworm) da dahildir
- Yapılabilecek işlerin kapsamını genişletmek için çeşitli araçlar ve betikler içerir
- Waydroid, LXC ve binder için kernel modüllerini kullandığından Waydroid-Linux live mode’da çalışmaz; düzgün çalışması için kurulum gerekir
- Beta indirme öğeleri README.md dosyasının kontrol edilmesini ister; örnek sürümler olarak Ubuntu 22.04 KDE-Plasma, Ubuntu 22.04 Gnome, Debian 12 Beta, Ubuntu 21.10 Beta ve önceki alfa sürümleri sunulur
1 yorum
Hacker News yorumları
Bunun ön sayfaya çıkmasına şaşırdım. Çünkü oldukça iyi bilinen bir yazılım
Üzücü olan, Waydroid’de çalışan Google tarafından sağlanan bir imaj olmaması. Örneğin genel sistem imajı gibi. İnternetten indirdiğim rastgele bir ROM’a parola girmek içime sinmiyor
https://source.android.com/docs/core/tests/vts/gsi
Waydroid gibi topluluk desteği ve sürekli dağıtım gerektiren projeler için doğal bir seçenek. Google, Android’in temeli olan AOSP’de başlangıçta bulunan birçok özgür ve açık kaynak parçayı yıllar içinde sürekli kaldırdı; bu yüzden LineageOS gibi projeler alternatif bileşenler geliştirmek zorunda kaldı. Yine de LineageOS’un AOSP üzerinde yaptığı değişikliklerin, Google dahil çoğu telefon üreticisininkinden daha az olduğunu düşünüyorum
Mac’te Docker Desktop ya da OrbStack gibi şeylerle ayağa kaldırılabilen konteynerleştirilmiş Android olsa güzel olurdu
Docker imajını değiştirip root’lu bir man-in-the-middle proxy’yi önceden ayarlamak, ardından Android uygulamasını çalıştırıp ağ trafiğini ve API çağrılarını çok daha kolay gözlemlemek isterdim
sudo ip netns exec wiresharkFuriLabs’in Android uygulama entegrasyonunu iyi yapmasının temeli buydu. Elbette fork’layıp [0] ciddi biçimde değiştirdiler ama Linux telefonda Android uygulamaları kullanılabilir kılan kullanıcı deneyimi harikaydı
[0] https://github.com/FuriLabs/waydroid
Furiphone FLX1 bunu yoğun biçimde kullanıyor ve gerçekten iyi. Gerçek bir Android telefonla yapmak isteyeceğiniz şeylerin çoğunu yapabiliyor
Tabii benim istediklerim çok fazla değil ama Signal ve Spotify için kullanan insanlar da biliyorum. Harika bir proje ve Linux telefonlara cuk oturuyor
Sonunda iki telefon taşımam gerekecek gibi. Banka ve kredi kartı uygulamaları her gün ihtiyaç duyduğum temel uygulamalar; bazı hesaplara masaüstü tarayıcıdan bile telefon uygulamasıyla doğrulama yapmadan giriş yapamıyorum. Tekil ödemeler de sık sık telefon uygulaması onayı gerektiriyor. Daha özgür bir kullanıcı deneyimi için hesap değiştirebilecek durumda da değilim
Finans dışında, ana işimde Google ürün ailesini kullanmam gerekiyor; başka işlerde de Discord kullanmam gerekmişti. Bu, işlevsellik azalsa bile tarayıcıdan mümkün olabilir gibi; ama banka ve kredi kartı uygulamaları için öyle değil
Bu Waydroid ya da FLX1’e yönelik bir şikâyet değil; yapılan işi ve yaratıcılığı takdir ediyorum. Tamamen özgür ve açık kaynak bir telefona sahip olmayı ve onu kendim yapmayı uzun zamandır hayal ettim; bunun ne kadar emek istediğini de biliyorum. Eskiden iki Nokia N900 de kullanmıştım
Sadece zaman değişti ve bugünkü günlük yaşamın gerektirdiği uygulama ya da protokolleri özgür ve açık kaynak tabanlı sistemler üzerinde veya onlarla yan yana çalıştırmanın bir yolu bulunur umarım
Ancak OLED panel olmaması belirleyici bir eksi olabilir
Uzun zaman önce satın aldığım üç uygulama var. İsveççe sözlük, Almanca-İsveççe sözlük ve İngilizce-İsveççe sözlük
Hâlâ kurulabiliyorlar ama uygulama mağazasında artık sunulmuyorlar. Şirket Norstedts doğal olarak abonelik modeline geçti. Bu uygulamaları masaüstünde kullanmak için Waydroid kullanıyorum ve çok memnunum
Birçok uygulama Google, Samsung gibi “resmî” Android dağıtımlarında çalışıyor olmaya bağımlı ve Waydroid’in Lineage tabanlı dağıtımında çalışmıyor
https://gitlab.com/android_translation_layer/android_transla... gibi Wine tarzı bir yaklaşım, uygulamaları “resmî” bir Android dağıtımında çalışıyormuş gibi kandırmaya yardımcı olabilir gibi görünüyor
ATL’nin Wine tarzı yaklaşımı API’leri taklit etmek için kesinlikle daha sezgisel; yine de ATL için ayrı bir yeniden uygulama gerekiyor. Buna karşılık Waydroid tüm Android ortamını çalıştırdığı için Magisk veya microG’yi yeniden kullanma ihtimali var
Bunu her gördüğümde “Harika! Linux karşılığı olmayan güzel Android uygulamalarını çalıştırabilirim” diye düşünüyorum ama her seferinde aklıma hiçbir şey gelmiyor. Mutlaka olması gereken bir Android uygulaması var mı?
Organic Maps’in masaüstü Linux sürümü var ama özellik eşitliğinden hâlâ çok uzak. Yine de Organic Maps için iyi bir masaüstü kullanıcı arayüzü yapmayı hedefleyen şu hibe [1] sayesinde bu değişebilir.
[1] https://nlnet.nl/project/OrganicMaps-ConvergentUI/
Bu konteyner donanımsal USB aygıtlarına erişebiliyor mu? PEQ içeren bir Moondrop FreeDSP USB-C kablom var ve yalnızca berbat bir Android uygulamasında çalışıyor.
Elimdeki Android tabletin dokunmatik ekranı da kötü olduğundan EQ ayarlarını değiştirmek çok uzun sürüyor. Bunu doğrudan Linux dizüstümden yapmak istiyorum.
Öyle olmasa bile sonuçta bir Linux konteyneri, biraz udev kuralıyla bir şekilde çalışır hâle getirilebilir.
Bu tür projelerde sürekli eksik gibi görünen birkaç şey var. Ana makinenin donanımsal 3D hızlandırmasını, çoğu telefonun varsayılan olarak desteklediği OpenGL ES ve Vulkan sürümleriyle kullanma kısmı yetersiz.
Ayrıca birçok uygulamada, telefonda çalışmadığını algılamaya yönelik yerleşik yöntemler var; cpuinfo’ya bakıp iddia edilen cihazla karşılaştırıyor ve sonra kapanıyor.
Cihazlarda beklenen ARM desteği de artıyor, beklenen işlem kapasitesi de bununla birlikte yükseliyor. Bu yüzden sıradan bir modern mobil ARM SoC’yi bile emüle etmek için gereken x86 ana makine performansı giderek artıyor.
Son olarak desteklenen Android sürümü neredeyse her zaman güncelin 3-4 nesil gerisinde kalıyor. Uygulamalar eski Android desteğini hızla kesiyor ya da eski OS sürümlerinde daha az özellik ve optimizasyonla çalışıyor. Bu projenin temel aldığı Android sürümü 2020’den.
Anekdot olarak, bu alanda en uyumlu ve en iyi optimize edilmiş emülasyon yığınına sahip BlueStacks bile 7800X3D / RTX 3090 üzerinde çalıştırıldığında çoğu oyunda geçen yılın Snapdragon 8 telefonunda yerel çalışmasından daha yavaş.
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, Vulkan sanallaştırması için Mesa’ya eklendi” (2024-09)
https://www.phoronix.com/news/Mesa-Gfxstream-Merged
Android geliştirme için neden resmi bir x86 konteyneri ya da ROM’u olmadığını bilmiyorum. Android uygulamalarının CI derlemeleri en yeni Android sürümünde test çalıştırmıyor mu? APK’ların CI derlemelerinin Android konteyneri olmadan GUI testlerini nasıl çalıştırdığını merak ediyorum.
Şaşırtıcı olan, birden fazla Android konteynerini LXC altında çalıştırılabilir hâle getirecek şekilde bunu soyutlayan kimsenin olmaması.
Waydroid’de yalnızca tek bir imaj var. Bana göre çok yamalı özel bir Linux çekirdeği kullanıyor gibiydi; tam çözemedim ama LXC arayüzü tarafı oldukça basit görünüyordu.