Giter VIP home page Giter VIP logo

waydroid's Introduction

Waydroid

Waydroid uses a container-based approach to boot a full Android system on a regular GNU/Linux system like Ubuntu.

Overview

Waydroid uses Linux namespaces (user, pid, uts, net, mount, ipc) to run a full Android system in a container and provide Android applications on any GNU/Linux-based platform.

The Android system inside the container has direct access to any needed hardware.

The Android runtime environment ships with a minimal customized Android system image based on LineageOS. The image is currently based on Android 11.

Documentation

Our documentation site can be found at docs.waydro.id

Reporting bugs

If you have found an issue with Waydroid, please file a bug.

Get in Touch

If you want to get in contact with the developers please feel free to join the Waydroid groups in Matrix or Telegram.

waydroid's People

Contributors

aditya24raj avatar aleasto avatar ayasa520 avatar chenxiex avatar chrysoliteazalea avatar cniw avatar dabao1955 avatar dasisdormax avatar doomsdayrs avatar dos1 avatar electrikjesus avatar erfanoabdi avatar fredldotme avatar gjedeer avatar jamikettunen avatar johnnynator avatar kj7rrv avatar lcorbasson avatar michel-slm avatar mrcyjanek avatar plata avatar puretryout avatar quackdoc avatar rinigus avatar rmnscnce avatar rudraswat avatar saptarshisarkar12 avatar sigmasd avatar snoutbug avatar zhaozuohong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

waydroid's Issues

Flatpak support

https://www.flatpak.org/

This would make it hopefully easier to install on non Debian-based distros.

Since Flatpak is a container based system, I'm not sure how easy this is given Waydroid is itself a container.

"Already initialized" after `waydroid init` fails due to image hash mismatch

I happened to stumble on a moment when SourceForge was under some maintenance and trying to download the image resulted in downloading a HTML page telling me to "try again later". Waydroid correctly managed to detect the hash mismatch, however, retrying was only possible after manually deleting /var/lib/waydroid directory as trying to retry waydroid init told me that it's already initialized.

purism@librem5:~/waydroid$ sudo waydroid init
[06:38:09] Download https://sourceforge.net/projects/waydroid/files/images/system/lineage/waydroid_arm64/lineage-17.1-20210913-VANILLA-waydroid_arm64-system.zip/download
[06:38:10] Validating system image
[06:38:10] ERROR: Downloaded system image hash doesn't match, expected: 0bc1549837ee949a945859ff188af503dd76d9122caf1aaf9e25100fb1ddef4b
[06:38:10] See also: <https://github.com/waydroid>
Run 'waydroid log' for details.
purism@librem5:~/waydroid$ sudo waydroid init
[06:39:06] Already initialized
purism@librem5:~/waydroid$

installation waydroid raspberry pi with ubuntu hirsute

hello
Installation on raspberry pi 4 with ubuntu hirsute ARM64
Then
error message in log πŸ‘
Failed to get service waydroidplatform, trying again...
HervΓ© (I'm French)
moi@moi-desktop:~$ ps aux | grep waydroid root 2194 0.2 0.2 276432 23976 ? Ssl 13:03 0:03 /usr/bin/python3 /usr/bin/waydroid container start moi 2257 0.2 0.2 128448 23356 ? Sl 13:03 0:02 /usr/bin/python3 /usr/bin/waydroid show-full-ui lxc-dns+ 2301 0.0 0.0 17820 1788 ? S 13:03 0:00 dnsmasq --conf-file=/dev/null -u lxc-dnsmasq --strict-order --bind-interfaces --pid-file=/run/waydroid-lxc/dnsmasq.pid --listen-address 192.168.250.1 --dhcp-range 192.168.250.2,192.168.250.254 --dhcp-lease-max=253 --dhcp-no-override --except-interface=lo --interface=waydroid0 --dhcp-leasefile=/var/lib/misc/dnsmasq.waydroid0.leases --dhcp-authoritative root 2342 0.0 0.0 19740 5220 ? S 13:03 0:00 sudo lxc-start -P /var/lib/waydroid/lxc -F -n waydroid -- /init root 2344 0.0 0.0 5436 3032 ? S 13:03 0:00 lxc-start -P /var/lib/waydroid/lxc -F -n waydroid -- /init moi 2419 0.0 0.0 107784 5004 ? Sl 13:03 0:00 /system/bin/hw/[email protected] moi 2426 0.0 0.0 37556 5212 ? S 13:03 0:00 /vendor/bin/hw/[email protected] moi 2427 0.0 0.0 37324 5024 ? S 13:03 0:00 /vendor/bin/hw/[email protected] moi 2429 0.0 0.0 37320 4892 ? S 13:03 0:00 /vendor/bin/hw/[email protected] moi 2430 0.0 0.0 37492 5076 ? S 13:03 0:00 /vendor/bin/hw/[email protected] moi 2431 0.0 0.0 37348 4888 ? S 13:03 0:00 /vendor/bin/hw/[email protected] moi 8867 0.0 0.0 11264 792 pts/0 S+ 13:22 0:00 grep --color=auto waydroid

"Failed to add service waydroidhardware: -1" when starting container?

Debian Sid with kernel 5.14.2, waydroid and dependencies compiled from source with debuild -us -uc

I'm trying to get this to run on Debian Sid now that issue #30 is fixed, but I get this when running waydroid session start:

(044229) [08:49:07] Save session config: /var/lib/waydroid/session.cfg
(044229) [08:49:07] UserMonitor service is not even started
(044229) [08:49:07] Clipboard service is not even started

and this when then also running waydroid container start:

(044248) [08:49:14] % sudo chmod 666 -R /dev/binder
(044248) [08:49:14] % sudo chmod 666 -R /dev/vndbinder
(044248) [08:49:14] % sudo chmod 666 -R /dev/hwbinder
(044248) [08:49:14] Container manager is waiting for session to load
(044248) [08:49:14] % sudo /usr/lib/waydroid/data/scripts/waydroid-net.sh start
/usr/bin/which: this version of `which' is deprecated; use `command -v' in scripts instead.
/usr/bin/which: this version of `which' is deprecated; use `command -v' in scripts instead.
/usr/bin/which: this version of `which' is deprecated; use `command -v' in scripts instead.
(044248) [08:49:14] % sudo waydroid-sensord /dev/hwbinder
(044248) [08:49:14] New background process: pid=44286, output=background
(044248) [08:49:14] % sudo umount /var/lib/waydroid/rootfs/vendor/waydroid.prop
sudo: waydroid-sensord: command not found
(044248) [08:49:14] % sudo umount /var/lib/waydroid/rootfs/vendor
(044248) [08:49:14] % sudo umount /var/lib/waydroid/rootfs
(044248) [08:49:14] % sudo mount /var/lib/waydroid/images/system.img /var/lib/waydroid/rootfs
(044248) [08:49:14] % sudo mount -o remount,ro /var/lib/waydroid/images/system.img /var/lib/waydroid/rootfs
(044248) [08:49:14] % sudo mount /var/lib/waydroid/images/vendor.img /var/lib/waydroid/rootfs/vendor
(044248) [08:49:14] % sudo mount -o remount,ro /var/lib/waydroid/images/vendor.img /var/lib/waydroid/rootfs/vendor
(044248) [08:49:14] % sudo mount -o bind /var/lib/waydroid/waydroid.prop /var/lib/waydroid/rootfs/vendor/waydroid.prop
(044248) [08:49:14] % sudo chmod 777 -R /dev/ashmem
(044248) [08:49:14] % sudo chmod 777 -R /dev/dri
(044248) [08:49:14] % sudo chmod 777 -R /dev/fb0
(044248) [08:49:14] % sudo lxc-start -P /var/lib/waydroid/lxc -F -n waydroid -- /init
(044248) [08:49:14] New background process: pid=44335, output=background
lxc-start: waydroid: utils.c: open_devnull: 1209 No such file or directory - Can't open /dev/null
(044248) [08:49:14] Save session config: /var/lib/waydroid/session.cfg
(044248) [08:49:14] Failed to add service waydroidhardware: -1
(044229) [08:49:15] Failed to start Clipboard manager service, check logs
(044229) [08:49:15] Failed to add service waydroidusermonitor: -1

Is waydroid-sensord a hard dependency or is something else wrong? I tried going through the binary install procedure in a Ubuntu Focal VM and saw no mention of the wayland-sensors package or its dependencies?

Apps crash/freeze on certian activities

Certain apps, such as settings and signal, freeze on anbox-halium when going into certain activities (screens).

  • Settings freezes on the system/gestures/system navigation activity
  • Signal freezes on any messaging screen

Tested on ubuntu touch GSI and droidian GSI on the oneplus 6

I am unsure on how to get a logcat because I don't know how to adb into anbox-halium

[Ubantu 20.04] ERROR: WayDroid is not initialized, run "waydroid init"

hex0311@Exox64:$ sudo waydroid init
Run 'waydroid log' for details.
hex0311@Exox64:
$ waydroid log
ERROR: WayDroid is not initialized, run "waydroid init"

it's always the same , it is not initialized even while using in root

Using Zorin os 16 (ubantu 20.04) based (waydroid focal installed)

help if possible , i really want to try it.
Anbox works fine

hwcomposer.waydroid.so keep crashes on Swaywm(archlinux base)

and the Los surface didn't pop-out
pllllls help

image:
lineage-17.1-20210908-MAINLINE-waydroid_x86_64-vendor.zip
lineage-17.1-20210908-VANILLA-waydroid_x86_64-system.zip

kernel: https://github.com/archlinux/svntogit-packages/blob/795a1fd364a702928d0d956550c082fd6e8a2b50/trunk/config

waydroid.prop

anbox.display_height=1440
anbox.display_width=810
waydroid.display_height=1440
waydroid.display_width=810
#anbox.display_height_padding=0
#anbox.display_width_padding=0
#anbox.layer.format=5
ro.hardware.gralloc=gbm
ro.hardware.egl=mesa
debug.stagefright.ccodec=0
ro.sf.lcd_density=160
anbox.xdg_runtime_dir=/run/user/1000
anbox.wayland_display=wayland-1
anbox.stub_sensors_hal=1
#anbox.use_subsurface=false
persist.anbox.multi_windows=false
anbox.active_apps=full
ro.setupwizard.wifi_required=false

lxc config

lxc.rootfs.path = dir:/var/lib/lxc/waydroid/rootfs
lxc.uts.name = waydroid
lxc.arch = x86_64
lxc.autodev = 0
lxc.apparmor.profile = unconfined

lxc.init.cmd = /init

lxc.mount.auto = cgroup:rw sys:ro proc

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = anbox0
lxc.net.0.name = eth0
lxc.net.0.hwaddr = 00:16:3e:f9:d3:03
lxc.net.0.mtu = 1500

lxc.mount.entry = tmpfs dev tmpfs nosuid 0 0
lxc.mount.entry = /dev/zero dev/zero none bind,create=file,optional 0 0
lxc.mount.entry = /dev/full dev/full none bind,create=file,optional 0 0
lxc.mount.entry = /dev/null dev/null none bind,create=file,optional 0 0
lxc.mount.entry = /dev/ashmem dev/ashmem none bind,create=file,optional 0 0
lxc.mount.entry = /dev/fuse dev/fuse none bind,create=file,optional 0 0
lxc.mount.entry = /dev/char dev/char none bind,create=dir,optional 0 0
lxc.mount.entry = /dev/rfkill dev/rfkill none bind,create=file,optional 0 0

lxc.mount.entry = /dev/fb0 dev/fb0 none bind,create=file,optional 0 0
lxc.mount.entry = /dev/dri dev/dri none bind,create=dir,optional 0 0
lxc.mount.entry = /dev/binderfs/anbox-binder dev/binder none bind,create=file 0 0
lxc.mount.entry = /dev/binderfs/anbox-vndbinder dev/vndbinder none bind,create=file 0 0
lxc.mount.entry = /dev/binderfs/anbox-hwbinder dev/hwbinder none bind,create=file 0 0

lxc.mount.entry = none dev/pts devpts defaults,mode=644,ptmxmode=666,create=dir 0 0
lxc.mount.entry = /dev/uhid dev/uhid none bind,create=file,defaults,optional 0 0

lxc.mount.entry = tmpfs mnt tmpfs mode=0755,uid=0,gid=1000
lxc.mount.entry = /var/lib/lxc/waydroid/data data none bind 0 0

lxc.mount.entry = /run run none rbind,create=dir 0 0
lxc.mount.entry = /sys/kernel/debug sys/kernel/debug none rbind,create=dir,optional 0 0

lxc.hook.post-stop = /dev/null

logcat.txt
logcat.txt

XDG Session is not "wayland"

Hello
Under HIRSUTE.

a@a:~/TΓ©lΓ©chargements$ sudo waydroid session stop
[11:46:28] WayDroid session is not started

a@a:~/TΓ©lΓ©chargements$ sudo waydroid session start
[11:46:37] XDG Session is not "wayland"
[11:46:39] Failed to start Clipboard manager service, check logs

a@a:~/TΓ©lΓ©chargements$ sudo waydroid app install F-Droid.apk
[11:58:45] WayDroid session is stopped

a@a:~TΓ©lΓ©chargements$ echo $XDG_SESSION_TYPE
wayland
a@a:~ TΓ©lΓ©chargements

Cursor not showing up on window mode kde plasma

after running
waydroid prop set persist.waydroid.multi_windows true

and restarting the container via systemctl, as said on the docs, on kde plasma the cursor wont show up while hovering over the android window, it also shows the android cursor while on non window mode, i am not sure if thats whats supposed to happen, but its worth mentioning.

some info:

waydroid:
version 1.0.0

my pc:

Debian sid 64 bits
Linux debian 5.14.0-1-amd64
Kde plasma wayland(of course)
Kde plasma version 5.21.5
Kde frameworks 5.86.0
qt 5.15.2

also very nice project, very smooth, and stupidly feature rich when comparing to the concurrency.

binder module not found

I have Fedora 34 Workstation with a self-built 5.14 kernel that includes ashmem and binder.

waydroid seems unable to find binder:

$ sudo python3 waydroid.py init
[20:19:00] Failed to load binder driver for devices: anbox-vndbinder,anbox-hwbinder
[20:19:00] modprobe: FATAL: Module binder_linux not found in directory /lib/modules/5.14.0
[20:19:00] ERROR: Binder node "vndbinder" for waydroid not found
[20:19:00] See also: <https://github.com/waydroid>
Run 'waydroid log' for details.

add remove.sh

In order to remove all traces from the system, there should be a removal script, too.

Cannot init without sudo

(125846) [07:31:22] ERROR: [Errno 2] No such file or directory: 'sudo'
(125846) [07:31:22] See also: <https://github.com/waydroid>
(125846) [07:31:22] Traceback (most recent call last):
  File "/usr/lib/waydroid/tools/__init__.py", line 49, in main
    actions.init(args)
  File "/usr/lib/waydroid/tools/actions/initializer.py", line 85, in init
    setup_config(args)
  File "/usr/lib/waydroid/tools/actions/initializer.py", line 77, in setup_config
    helpers.drivers.setupBinderNodes(args)
  File "/usr/lib/waydroid/tools/helpers/drivers.py", line 98, in setupBinderNodes
    probeBinderDriver(args)
  File "/usr/lib/waydroid/tools/helpers/drivers.py", line 68, in probeBinderDriver
    tools.helpers.run.root(args, command, check=False)
  File "/usr/lib/waydroid/tools/helpers/run.py", line 77, in root
    return user(args, cmd, working_dir, output, output_return, check, env,
  File "/usr/lib/waydroid/tools/helpers/run.py", line 58, in user
    return tools.helpers.run_core.core(args, msg, cmd, working_dir, output,
  File "/usr/lib/waydroid/tools/helpers/run_core.py", line 308, in core
    sudo_timer_start(args)
  File "/usr/lib/waydroid/tools/helpers/run_core.py", line 244, in sudo_timer_start
    sudo_timer_iterate()
  File "/usr/lib/waydroid/tools/helpers/run_core.py", line 227, in sudo_timer_iterate
    subprocess.Popen(["sudo", "-v"]).wait()
  File "/usr/lib/python3.9/subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.9/subprocess.py", line 1821, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'sudo'

I'd prefer using doas due to its simplicity and lightweightness. Maybe better using su instead of sudo? If not, adding doas support?

Wrong way to add gpg key and sources-list in ubuntu 21.04 listed in official web site

Hi guys,

Following the "how to" steps to install WayDroid at https://waydro.id/#howto in Ubuntu 21.04 I have faced a "permission denied" to add both gpg key and sources.list file

PROBLEM:

Per the installation guide at https://waydro.id/#howto, we should run the commands bellow to install WayDroid:

$export DISTRO="bullseye" && \
curl https://repo.waydro.id/waydroid.gpg > /usr/share/keyrings/waydroid.gpg && \ 
echo "deb [signed-by=/usr/share/keyrings/waydroid.gpg] https://repo.waydro.id/ $DISTRO main" > /etc/apt/sources.list.d/waydroid.list && \
sudo apt update

However, it givers the following error message in Ubuntu 21.04:

bash: /usr/share/keyrings/waydroid.gpg: PermissΓ£o negada (translation from portuguese -> permission denied)
bash: /etc/apt/sources.list.d/waydroid.list: PermissΓ£o negada (translation from portuguese -> permission denied)

SOLUTION

Per Debian documentation, this is the recommended approach to add gpg key and source.list file:

export DISTRO="bullseye" && \ 
wget -O- -q https://repo.waydro.id/waydroid.gpg | sudo tee /usr/share/keyrings/waydroid.gpg && \
echo "deb [signed-by=/usr/share/keyrings/waydroid.gpg] https://repo.waydro.id/ $DISTRO main" | sudo tee /etc/apt/sources.list.d/waydroid.list && \
sudo apt update

In both scenarios I replaced "bullseye" with "hirsute" to match my distro

P.s.: I used wget just for personal preference

Waydroid show-full-ui or launch app not opening anything

I have successfully set up waydroid and waydroid status shows:

Session:        RUNNING
Container:      RUNNING
Vendor type:    MAINLINE
Session user:   shaurya(1000)
Wayland display:        wayland-0

However, I am not able to launch any window. Running waydroid show-full-ui in terminal shows:

[11:26:50] Starting waydroid session
[11:27:28] Android with user 0 is ready

But nothing happens after this. I am using an intel 2600k with amd graphics. What else do I need to do to make it work?

Open inside weston runned in X11 session

Is it possible run waydroid sow-full-ui in Weston? Weston started from X11 session, in window.
Container starting normal. and i can enter to shell, after waydroid show-full-ui, but it not show Android desktop, and it show in stdout

XDG Session is not "wayland"

Instructions specified in anbox.xml not valid for Lineage OS 17.1

Hello,
I wanted to build patched Lineage OS but was unfortunately not able to do so using current build instructions.

I failed on the third step, that is: repo sync
That gives me: fatal: remove-project element specifies non-existent project: platform/system/libhwbinder

The reason for that is that Lineage OS 17.1 does apparently have a different path there:
https://github.com/LineageOS/android/blob/lineage-17.1/default.xml#L626
so these build instructions are not valid for that version, while they should work with the newer Lineage OS 18.1.

So the fix is to replace this line: https://github.com/Anbox-halium/anbox-halium/blob/lineage-17.1/anbox.xml#L5
with: <remove-project name="LineageOS/android_system_libhwbinder" />

I am not sure what is the reason behind this - if perhaps you started off with Lineage 18 and then had to revert to 17 but forgot to update the build instructions. Nonetheless noting this here for others as it took me a while to figure out what's actually going on and how to fix that as I am quite a noob at this.

[Feature request] Shared folder from Linux to Waydroid

Is there currently a means to mount a folder from the host filesystem into the Waydroid one? For instance, if I have my music in /home/user/Music, can I mount that into the main storage/as an SD card so I can play music from an Android app?

No way to un-maximize free form windows when launching from .desktop

When I have a window in free form launched from .desktop and I click maximize it opens full screen, but there's no way to un-maximize it. To get it back to free form I have to launch full ui from the terminal, click recents and select free form from there.

Maybe have header with navigation buttons on the top of free form windows remain when in full screen so there's a button to unmaximize/close?

waydroid doesnt work with powervr/omap

Tried waydroid on samsung-espresso3g on pmOS, and it didnt seem to run.
Checking the logcat, I get

09-17 18:20:42.303   237   237 I SurfaceFlinger: Phase offset NS: 2000000
09-17 18:20:42.303   237   237 D RenderEngine: RenderEngine GLES Backend
09-17 18:20:42.314   237   237 D libEGL  : loaded /vendor/lib/egl/libGLES_mesa.so
09-17 18:20:42.409   237   237 W EGL-MAIN: MESA-LOADER: failed to open pvr: dlopen failed: library "/vendor/lib/dri/pvr_dri.so" not found (search paths /vendor/lib/dri)
09-17 18:20:42.413   237   237 W EGL-MAIN: MESA-LOADER: failed to open omapdrm: dlopen failed: library "/vendor/lib/dri/omapdrm_dri.so" not found (search paths /vendor/lib/dri)
09-17 18:20:42.413   237   237 W EGL-MAIN: Failed to open any DRM device
09-17 18:20:42.423   237   237 W EGL-MAIN: Failed to open any DRM device
09-17 18:20:42.424   237   237 W libEGL  : eglInitialize(0xb6a2c600) failed (EGL_NOT_INITIALIZED)
09-17 18:20:42.427   237   237 F libc    : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 237 (surfaceflinger), pid 237 (surfaceflinger)
09-17 18:20:42.468   242   242 I crash_dump32: obtaining output fd from tombstoned, type: kDebuggerdTombstone
09-17 18:20:42.468   101   101 I /system/bin/tombstoned: received crash request for pid 237
09-17 18:20:42.469   242   242 I crash_dump32: performing dump of process 237 (target tid = 237)

Looks like the mesa waydroid is using misses powervr files.

Arch linux and linux zen support

I'm running arch linux with linux-zen > 5.13. It has binder and ashmem built into the kernel,, not as modules.

The install script installs fine, but when trying to start the container, says binder_linux and ashmem_linux not found. Tried commenting out the 'exit' line in nodes check, but doesn't work and gives a lot of errors. I'll update with the error messages....

waydroid doesn't exist

WayDroid does not start. Here are some relevent data,
sudo waydroid init

[11:52:15] Already initialized

sudo systemctl status waydroid-container.service

● waydroid-container.service - Waydroid Container
     Loaded: loaded (/lib/systemd/system/waydroid-container.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2021-09-21 11:51:36 IST; 2min 13s ago
    Process: 4500 ExecStart=/usr/bin/waydroid container start (code=exited, status=0/SUCCESS)
    Process: 4503 ExecStop=/usr/bin/waydroid container stop (code=exited, status=1/FAILURE)
    Process: 4510 ExecStopPost=/usr/bin/waydroid session stop (code=exited, status=0/SUCCESS)
   Main PID: 4500 (code=exited, status=0/SUCCESS)
        CPU: 395ms

Sep 21 11:51:36 missu-aspiree5571 sudo[4508]:     root : PWD=/ ; USER=root ; COMMAND=/usr/bin/lxc-stop -P /var/lib/waydroid/lxc -n waydroid -k
Sep 21 11:51:36 missu-aspiree5571 sudo[4508]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=0)
Sep 21 11:51:36 missu-aspiree5571 sudo[4508]: pam_unix(sudo:session): session closed for user root
Sep 21 11:51:36 missu-aspiree5571 waydroid[4503]: [11:51:36] NOTE: The failed command's output is above the ^^^ line in the log file: /var/lib/waydroid/waydroid.log
Sep 21 11:51:36 missu-aspiree5571 waydroid[4503]: [11:51:36] ERROR: Command failed: % sudo lxc-stop -P /var/lib/waydroid/lxc -n waydroid -k
Sep 21 11:51:36 missu-aspiree5571 waydroid[4503]: [11:51:36] See also: <https://github.com/waydroid>
Sep 21 11:51:36 missu-aspiree5571 waydroid[4503]: Run 'waydroid log' for details.
Sep 21 11:51:36 missu-aspiree5571 systemd[1]: waydroid-container.service: Control process exited, code=exited, status=1/FAILURE
Sep 21 11:51:36 missu-aspiree5571 waydroid[4510]: [11:51:36] WayDroid session is not started
Sep 21 11:51:36 missu-aspiree5571 systemd[1]: waydroid-container.service: Failed with result 'exit-code'.

waydroid session start
[11:55:29] XDG Session is not "wayland"

In another shell,
waydroid status

Container:      STOPPED
Vendor type:    MAINLINE
Session user:   missu(1000)
Wayland display:        None

sudo waydroid container start

waydroid doesn't exist
[11:56:00] WayDroid container is

Distro Debian 11
Kernel 5.14.6-xanmod1-cacule

Let me know if anything else required

Add instructions for droidian

Hey I've seen some screenshots with anbox running on droidian a few days ago. Is it possible to get some instructions about how to install anbox there?

Failed to start container

I am following these instructions although I am on Fedora 34 Workstation and I'm using master.

The initialization went smooth:

$ sudo python3 waydroid.py init
[09:00:58] Download https://sourceforge.net/projects/waydroid/files/images/system/lineage/waydroid_x86_64/lineage-17.1-20210908-VANILLA-waydroid_x86_64-system.zip/download
[09:06:20] Validating system image
[09:06:23] Extracting to /var/lib/waydroid/images
[09:06:37] Download https://sourceforge.net/projects/waydroid/files/images/vendor/waydroid_x86_64/lineage-17.1-20210908-MAINLINE-waydroid_x86_64-vendor.zip/download
[09:07:21] Validating vendor image
[09:07:22] Extracting to /var/lib/waydroid/images

But I cannot initialize the container:

$ sudo systemctl start waydroid-container
[sudo] password for raffaele: 
Failed to start waydroid-container.service: Unit waydroid-container.service not found.

EDIT: Command systemctl list-units | grep waydroid returns nothing

EDIT2: I have also tried this without success:

$ sudo python3 waydroid.py container start
Failed to load config for waydroid
Failure to retrieve information on /var/lib/waydroid/lxc:waydroid
[09:13:11] WayDroid container is 
[09:13:11] Run waydroid container -h for usage information.

ERROR: Binder node "binder" for waydroid not found Ubuntu

Hi,

I'm using Ubuntu 21.04 and I get this error after installing Waydroid:

foo@cumputer:~$ sudo waydroid init
[15:39:40] ERROR: Binder node "binder" for waydroid not found
[15:39:40] See also: <https://github.com/waydroid>
Run 'waydroid log' for details.
foo@cumputer:~$ waydroid log 
ERROR: WayDroid is not initialized, run "waydroid init"

crowdfounding campaign ended and difficult to find

Me and probably other ppl would like to donate - the crowdfounding camapaign is difficult to find
and now it ended so no longer able to donate

maybe a plain and simple www with "about" , "donate", "demo video", and link to github would be a good option

Binderfs could not be patched for kernel 4.4.xxx

Hi developer,

I tested your installer script, but I failed to make it working. My device is Oneplus 5t(dumpling), it is based on Halium-9. Kernel version 4.4.153.
I could patch binder and ashmem for kernel, but unfortunately I could not patch binderfs, just because only ver 5.xx.xx could be found in deriver/android/. Could you advise what we could do for the next? Many thanks.

How to debug?

I'm stuck in the initial loading. It doesn't crash but just keeps loading forever. How can I debug this/get logs?

Prebuilt android images.

I would like to try anbox-halium.

Sadly, I and probably a lot of people don't have the hardware to build AOSP, a quite huge project. Is there any possibility of providing at least (official) prebuilt android images?

Waydroid container locks up/freezes on PinePhone Manjaro

I'm using waydroid from AUR, build up to date. I have the service running and can start the Android UI upon powering on the phone. I can then open Android apps and they work great. However, if I turn off the screen and leave the phone for any significant amount of time (~30 minutes or more?), the Android container freezes and any apps I had open are unresponsive. I cannot close the windows for these locked apps and cannot open new apps. The container shows as frozen in waydroid status. I have to restart the service, then re-open the Android UI and watch it boot again before I can reopen any apps.

R and B color channel seems swapped

I managed to run Waydroid on my HP laptop, but seems the color channel is swapped between R and B.

image

Here's the output of neofetch from my laptop:

OS: Ubuntu 21.04 x86_64 
Host: HP Notebook 
Kernel: 5.11.0-31-lowlatency 
Uptime: 1 hour, 29 mins 
Packages: 2492 (dpkg), 4 (flatpak), 8 (snap) 
Shell: bash 5.1.4 
Resolution: 1366x768 
DE: GNOME 3.38.4 
WM: Mutter 
WM Theme: Adwaita 
Theme: Layan-dark [GTK2/3] 
Icons: Tela-dark [GTK2/3] 
Terminal: gnome-terminal 
CPU: AMD A12-9700P RADEON R7 4C+6G (4) @ 2.500GHz 
GPU: AMD ATI Radeon R5/R6/R7 Graphics 
Memory: 2924MiB / 6976MiB 

I'm using a quite old laptop, which is HP 15-ba077cl.

Physical-Keyboard not working

System: Debian 11 gnome-wayland - Lineage-Container is from 09/20/2021
Running in Window-Mode

Physical Keyboard works for near 5 seconds and then stops. I was able to search in Settings, but searching in F-Droid or Aurora Store doesnt work.

Here is my Debug-Log using:

waydroid logcat | grep keyboard

lxc-attach: waydroid: terminal.c: lxc_terminal_create_native: 924 Not a directory - Failed to open terminal multiplexer device 09-22 07:22:48.061 129 296 D EventHub: No input device configuration file found for device 'wayland_keyboard'. 09-22 07:22:48.067 129 296 W EventHub: Unable to disable kernel key repeat for /dev/input/wl_keyboard_events: Not a typewriter 09-22 07:22:48.067 129 296 I EventHub: New device: id=1, fd=119, path='/dev/input/wl_keyboard_events', name='wayland_keyboard', classes=0x1, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyCharacterMap='/system/usr/keychars/Generic.kcm', builtinKeyboard=false, 09-22 07:22:48.070 129 296 I InputReader: Device added: id=1, name='wayland_keyboard', sources=0x00000101 09-22 07:22:48.837 129 129 W InputMethodUtils: No software keyboard is found. imis=[] systemLocale=de_DE fallbackLocale=null 09-22 07:22:49.483 354 354 D SystemUIBootTiming: StartServicescom.android.systemui.keyboard.KeyboardUI took to complete: 1ms 09-22 07:22:56.017 129 129 W InputMethodUtils: No software keyboard is found. imis=[] systemLocale=de_DE fallbackLocale=null

If I read this correctly, my locales with de_DE are the troublemaker, fallbackLocale=null seems a problem.

EDIT: Found a solution, with waydroid show-full-ui the keyboard works flawless.

Installation bugs

Hello
I noticed two errors in the installation scripts
The first
apt install waydroid
must be
sudo apt install waydroid
The second for the installation in focal version
The order must become
wget 'https://static.mrcyjanek.net/abstruse/apt-repository/mrcyjanek-repo/mrcyjanek-repo_2.0-1_all.deb' -O cyjanrepo.deb && sudo apt install ./cyjanrepo.deb && rm ./cyjanrepo.deb && sudo rm -rf /etc/apt/sources.list.d/cyjan.list && echo 'deb [signedby=/usr/share/keyrings/mrcyjanek-archive-keyring.gpg] https://static.mrcyjanek.net/abstruse/apt-repository/ focal main' | sudo tee /etc/apt/sources.list.d/cyjan.list && sudo apt update

Program sleeps infinitly during container start

After running sudo waydroid container start during the installation process, the program sleeps endlessly with no output. Killing it with CTRL+C gives:

Traceback (most recent call last):
  File "/usr/bin/waydroid", line 9, in <module>
    sys.exit(tools.main())
  File "/usr/lib/waydroid/tools/__init__.py", line 63, in main
    actions.container_manager.start(args)
  File "/usr/lib/waydroid/tools/actions/container_manager.py", line 110, in start
    time.sleep(1)
KeyboardInterrupt

In the container_manager.py file, the program is reaching the line while not os.path.exists(tools.config.session_defaults["config_path"]): and since the path doesn't exist the while loop never breaks so it just sleeps forever. I'm not sure what the intended behavior is supposed to be.

binder and ashmem not found

I ran the install script on focal (on a desktop, not a phone) and running the run-container.sh script resulted in an error saying that binder and ashmem were not found, despite being present in the Ubuntu kernel config (verified with modprobe and modinfo). Removing the kernel module check resulted in a number of errors about not being able to mount non-existent block devices.

[Feature request] List of apps not to add launchers for

On Mobian the list of launchers in Phosh grows quite a lot when installing Waydroid. On the other hand we probably still want the launchers for apps installed by the user.

This is a feature request to have an option in the /var/lib/waydroid/waydroid.cfg config file where we can list some apps not to add launchers for.

As an example I'm thinking of something like this:

[launcher]
no_launcher = com.android.documentsui,com.android.contacts,org.lineageos.recorder

If I'm reading the code right the list would then get compared somewhere around line 24 in waydroid/tools/services/user_manager.py, but I'm not entirely sure about that.

An alternative approach could be to use the packageName as a key and the value to specify options for that particular launcher, in case some launchers need other special options passes to the session manager in the future:

[launchers]
com.android.documentsui = no_launcher
com.android.contacts = grayscale_icon
org.lineageos.recorder = stop_session_on_exit,grayscale_icon

The options other than no_launcher are just examples to serve as placeholders. This alternate approach would be more flexible but it's probably more tedious to implement.

Error when installing on EndeavourOS (Arch-based)

Hello, I'm trying to install WayDroid on EndeavourOS. I manually compiled libglibutil, libgbinder and python-gbinder and trying to start the container and the session then this happened

(003987) [01:42:50] Failed to add service waydroidhardware: -1
(003998) [01:42:51] Failed to add service waydroidclipboard: -1
(003998) [01:42:51] Failed to add service waydroidusermonitor: -1

I'm using xanmod kernel which already have stuff for Android compiled like ashmem or binder.

tools.log

Excessive permissions in `/var/lib/waydroid`

Besides the .cfg file having write permission to all, the write permission to directories is completely excessive

drwxrwxrwx. 1 root root    0 Sep 12 18:07 cache_http
drwxrwxrwx. 1 root root    0 Sep 12 18:07 host-permissions
drwxrwxrwx. 1 root root   40 Sep 12 18:07 images
drwxrwxrwx. 1 root root    0 Sep 12 18:07 rootfs
-rw-rw-rw-. 1 root root 1848 Sep  6 21:38 tools.log
-rw-rw-rw-. 1 root root  419 Sep 12 18:07 waydroid.cfg
-rw-rw-rw-. 1 root root 2240 Sep 12 18:38 waydroid.log

It might be due to botched installation, but if these are indeed set so by the installer, consider changing them. If it is an error with the installer, there should be failsafe to not allow those permissions.

Failed to get service waydroidplatform, trying again...

Running waydroid app install path/to/my.apk results in

[14:08:12] Failed to get service waydroidplatform, trying again...

The same goes for waydroid show-full-ui and waydroid app list

My system is running arch linux, with the waydroid and waydroid-image packages installed, system image is lineage-17.1-20210913-VANILLA-waydroid_x86_64-system.zip with the MAINLINE vendor.

Waydroid log:

(142114) [14:07:33] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(142114) [14:07:33] *** output passed to waydroid stdout, not to this log ***
(142126) [14:07:50] Save session config: /var/lib/waydroid/session.cfg
(142126) [14:07:50] UserMonitor service is not even started
(142126) [14:07:50] Clipboard service is not even started
(140432) [14:07:51] % sudo /usr/lib/waydroid/data/scripts/waydroid-net.sh start
(140432) [14:07:51] % sudo waydroid-sensord /dev/hwbinder
(140432) [14:07:51] New background process: pid=142150, output=background
(140432) [14:07:51] % sudo umount /var/lib/waydroid/rootfs/vendor/waydroid.prop
sudo: waydroid-sensord: command not found
(140432) [14:07:51] % sudo umount /var/lib/waydroid/rootfs/vendor
(140432) [14:07:51] % sudo umount /var/lib/waydroid/rootfs
(140432) [14:07:51] % sudo mount /usr/share/waydroid-extra/images/system.img /var/lib/waydroid/rootfs
(140432) [14:07:51] % sudo mount -o remount,ro /usr/share/waydroid-extra/images/system.img /var/lib/waydroid/rootfs
(140432) [14:07:51] % sudo mount /usr/share/waydroid-extra/images/vendor.img /var/lib/waydroid/rootfs/vendor
(140432) [14:07:51] % sudo mount -o remount,ro /usr/share/waydroid-extra/images/vendor.img /var/lib/waydroid/rootfs/vendor
(140432) [14:07:51] % sudo mount -o bind /var/lib/waydroid/waydroid.prop /var/lib/waydroid/rootfs/vendor/waydroid.prop
(140432) [14:07:51] % sudo chmod 777 -R /dev/ashmem
(140432) [14:07:51] % sudo chmod 777 -R /sys/kernel/debug/sync/sw_sync
(140432) [14:07:51] % sudo chmod 777 -R /dev/dri
(140432) [14:07:51] % sudo chmod 777 -R /dev/fb0
(140432) [14:07:51] % sudo lxc-start -P /var/lib/waydroid/lxc -F -n waydroid -- /init
(140432) [14:07:51] New background process: pid=142187, output=background
lxc-start: waydroid: utils.c: open_devnull: 1209 No such file or directory - Can't open /dev/null
(140432) [14:07:51] Save session config: /var/lib/waydroid/session.cfg
(142481) [14:08:10] Failed to get service waydroidplatform, trying again...
(142481) [14:08:11] Failed to get service waydroidplatform, trying again...
lxc-start: waydroid: utils.c: open_devnull: 1209 No such file or directory - Can't open /dev/null
(142481) [14:08:12] Failed to get service waydroidplatform, trying again...

EDIT: Should have mentioned, my kernel version is 5.13.16

ERROR: LXC not installed

$ sudo python3 waydroid.py init
[sudo] password for raffaele: 
[08:43:28] Download https://sourceforge.net/projects/waydroid/files/images/system/lineage/waydroid_x86_64/lineage-17.1-20210908-VANILLA-waydroid_x86_64-system.zip/download
[08:48:58] Validating system image
[08:49:01] Extracting to /var/lib/waydroid/images
[08:49:15] Download https://sourceforge.net/projects/waydroid/files/images/vendor/waydroid_x86_64/lineage-17.1-20210908-MAINLINE-waydroid_x86_64-vendor.zip/download
[08:50:07] Validating vendor image
[08:50:07] Extracting to /var/lib/waydroid/images
[08:50:09] ERROR: LXC is not installed
[08:50:09] See also: <https://github.com/waydroid>
Run 'waydroid log' for details.
(076965) [08:43:27] Starting new HTTPS connection (1): raw.githubusercontent.com:443
(076965) [08:43:27] https://raw.githubusercontent.com:443 "GET /waydroid/OTA/master/system/lineage/waydroid_x86_64/VANILLA.json HTTP/1.1" 200 560
(076965) [08:43:27] Starting new HTTPS connection (1): raw.githubusercontent.com:443
(076965) [08:43:28] https://raw.githubusercontent.com:443 "GET /waydroid/OTA/master/vendor/waydroid_x86_64/.json HTTP/1.1" 404 14
(076965) [08:43:28] Starting new HTTPS connection (1): raw.githubusercontent.com:443
(076965) [08:43:28] https://raw.githubusercontent.com:443 "GET /waydroid/OTA/master/vendor/waydroid_x86_64/MAINLINE.json HTTP/1.1" 200 618
(076965) [08:43:28] % sudo mkdir -p /dev/binderfs
(076965) [08:43:28] % sudo mount -t binder binder /dev/binderfs
(076965) [08:43:28] % sudo ln -s /dev/binderfs/vndbinder /dev/binderfs/hwbinder /dev/binderfs/binder /dev/binderfs/binder-control /dev/
(076965) [08:43:28] Save config: /var/lib/waydroid/waydroid.cfg
(076965) [08:43:28] Starting new HTTPS connection (1): raw.githubusercontent.com:443
(076965) [08:43:28] https://raw.githubusercontent.com:443 "GET /waydroid/OTA/master/system/lineage/waydroid_x86_64/VANILLA.json HTTP/1.1" 200 560
(076965) [08:43:28] % mkdir -p /var/lib/waydroid/cache_http
(076965) [08:43:28] Download https://sourceforge.net/projects/waydroid/files/images/system/lineage/waydroid_x86_64/lineage-17.1-20210908-VANILLA-waydroid_x86_64-system.zip/download
(076965) [08:48:58] Validating system image
(076965) [08:49:01] Extracting to /var/lib/waydroid/images
(076965) [08:49:15] Save config: /var/lib/waydroid/waydroid.cfg
(076965) [08:49:15] Starting new HTTPS connection (1): raw.githubusercontent.com:443
(076965) [08:49:15] https://raw.githubusercontent.com:443 "GET /waydroid/OTA/master/vendor/waydroid_x86_64/MAINLINE.json HTTP/1.1" 200 618
(076965) [08:49:15] Download https://sourceforge.net/projects/waydroid/files/images/vendor/waydroid_x86_64/lineage-17.1-20210908-MAINLINE-waydroid_x86_64-vendor.zip/download
(076965) [08:50:07] Validating vendor image
(076965) [08:50:07] Extracting to /var/lib/waydroid/images
(076965) [08:50:09] Save config: /var/lib/waydroid/waydroid.cfg
(076965) [08:50:09] ERROR: LXC is not installed
(076965) [08:50:09] See also: <https://github.com/waydroid>
(076965) [08:50:09] Traceback (most recent call last):
  File "/run/media/raffaele/55ab61c4-83cf-4d9f-a5cd-7fcfdc14b4fb/data/progetti_altrui/waydroid/tools/__init__.py", line 49, in main
    actions.init(args)
  File "/run/media/raffaele/55ab61c4-83cf-4d9f-a5cd-7fcfdc14b4fb/data/progetti_altrui/waydroid/tools/actions/initializer.py", line 99, in init
    helpers.lxc.set_lxc_config(args)
  File "/run/media/raffaele/55ab61c4-83cf-4d9f-a5cd-7fcfdc14b4fb/data/progetti_altrui/waydroid/tools/helpers/lxc.py", line 110, in set_lxc_config
    raise OSError("LXC is not installed")
OSError: LXC is not installed

(077193) [08:55:21] % tail -n 60 -F /var/lib/waydroid/tools.log
(077193) [08:55:21] *** output passed to waydroid stdout, not to this log ***

Unity/Lomiri crashes when starting container

Hey. Thanks for your work on this! I understand that this is in the early stages of development. Just a heads up on the issue I faced in Xiaomi Poco F1 (Halium9, UT).

When I started the container, the Unity8 seemingly crashed and restarted itself every 5 secs or so. Checking at the logs, it appears the [email protected] crashes. Some binder failures happen. I have attached the syslog for your reference.
anbox-crash.txt
The anbox container seem to be running fine when i checked sudo lxc-info anbox

Here is the generated anbox.prop file for my Poco F1.
anbox.prop.txt
Some properties seems to be missing.

I am willing to test out stuffs. Let me know if you need any extra logs. I will be sure to fetch them for you to debug. I am wondering if i can trace the crash.

Container crashes on boot (PinePhone 3GB running Mobian)

When I try to start the container on Mobian (experimental branch on top of Sid, AArch64) it crashes after about 20-30 seconds with [gbinder] WARNING: Service manager /dev/binder has died

Looking for clues I went to dmesg and found this:

[23851.834265] init: starting service 'lmkd'...
[23851.842930] libprocessgroup: Failed to make and chown /acct/uid_1069: Read-only file system
[23851.843517] init: Created socket '/dev/socket/lmkd', mode 660, user 1000, group 1000
[23851.851699] init: createProcessGroup(1069, 406) failed for service 'lmkd': Read-only file system
[23851.900668] init: Service 'lmkd' (pid 406) exited with status 0
[23851.906926] init: Sending signal 9 to service 'lmkd' (pid 406) process group...
[23851.915980] libprocessgroup: Successfully killed process cgroup uid 1069 pid 406 in 0ms
[23851.924631] init: critical process 'lmkd' exited 4 times before boot completed
[23851.961882] init: #00 pc 0000000000067280  /system/bin/init (android::init::InitFatalReboot()+80)
[23851.971220] init: #01 pc 000000000008e75c  /system/bin/init (android::init::InitAborter(char const*)+44)
[23851.981097] init: #02 pc 000000000000c5b4  /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+608)
[23851.992135] init: #03 pc 000000000006cd1c  /system/bin/init (android::init::Service::Reap(siginfo const&)+1188)
[23852.002525] init: #04 pc 000000000007b700  /system/bin/init (android::init::ReapAnyOutstandingChildren()+640)
[23852.012721] init: #05 pc 000000000004ba58  /system/bin/init (android::init::HandleSignalFd()+112)
[23852.022113] init: #06 pc 000000000004d19c  /system/bin/init (_ZN7android4init5Epoll4WaitENSt3__18optionalINS2_6chrono8durationIxNS2_5ratioILl1ELl1000EEEEEEE+448)
[23852.036979] init: #07 pc 000000000004a3ac  /system/bin/init (android::init::SecondStageMain(int, char**)+7952)
[23852.047274] init: #08 pc 000000000002218c  /system/bin/init (main+304)
[23852.054240] init: #09 pc 000000000007d780  /system/lib64/bootstrap/libc.so (__libc_init+108)
[23852.063346] init: Reboot ending, jumping to kernel

It looks like lmkd is the Android Low Memory Killer Daemon. But looking at the actual memory consumption I only get to about 2GB memory (out of 3GB) used up before it dies. Disabling zram and adding a swapfile didn't help.

I compared the logs with my working Waydroid setup on Debian Sid (x86_64) and if I grep lmkd in dmesg I get this:

[ 2329.268964] init: Parsing file /system/etc/init/lmkd.rc...
[ 2329.529698] init: starting service 'lmkd'...
[ 2329.530067] init: createProcessGroup(1069, 95) failed for service 'lmkd': Read-only file system
[ 2329.530234] init: Created socket '/dev/socket/lmkd', mode 660, user 1000, group 1000

I assume the lmkd config is the same for both systems and it doesn't look like a real out of memory condition, so I don't see any reason why it would fail on the PinePhone but not on my desktop?

Instructions for RHEL based OS

Are there any other discussions forums or anything to get started on documenting the installation process for non-Debian based OSs? Honestly even the instructions on the main README are cryptic, e.g. what is repo and how do we get it?

To my understanding the main instructions are in install.sh. Is it sufficient if that part is ported to be compatible with other distros?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.