Waydroid jest narzędziem pozwalającym na uruchomienie androida bądź jego aplikacji pod systemem Linux. Uruchamianie aplikacji zbudowanych dla ARM na x86 zapewniają biblioteki libndk (rekomendowana dla CPU AMD) bądź libhoudini (rekomendowana dla CPU Intel). Domyślny obraz systemu Android pochodzi z LineageOS.
instalacja w pseudo-chroot
Waydroid może być zainstalowany w pseudo-chroot opartym o przestrzenie nazw. Taka instalacja wymaga przekopiowania konfiguracji uprawnień dbus z chroot na system podstawowy:
CHROOT_DIR=/opt/games
for f in \
/usr/share/dbus-1/services/id.waydro.Container.service \
/usr/share/dbus-1/system-services/id.waydro.Container.service \
/usr/share/dbus-1/system.d/id.waydro.Container.conf \
/usr/share/polkit-1/actions/id.waydro.Container.policy
do
cp -i $CHROOT_DIR/$f $f;
done
Ręczne uruchamianie
Domyślnie środowisko kontenerowe uruchamiane jest przez systemd.
Można temu zapobiec wyłączając i blokując usługę waydroid-container (oraz powiązane usługi lxc):
disable() { systemctl stop $1; systemctl disable $1; systemctl mask $1; }
disable waydroid-container
disable lxc-net
disable lxc
Nie jest to konieczne jeżeli Waydroid został zainstalowany nie na głównym systemie (w środowisku typu chcroot).
Pozwala to na ręczne uruchamianie kontenera tylko wtedy kiedy jest to potrzebne, można do tego użyć skryptu:
# VERBOSE="--details-to-stdout --verbose"
mkdir -p /run/user/$UID/pulse/
ln -fs /var/run/pulse/native /run/user/$UID/pulse/native
sudo /usr/bin/waydroid $VERBOSE -w container start &
echo ""
echo "Use Ctrl+C in this window to close."
echo ""
cage -- waydroid $VERBOSE -w show-full-ui
sudo /usr/bin/waydroid $VERBOSE -w container stop
Obsługa
- Dostęp do konsoli Androida:
sudo waydroid shell - Instalacja apk z zewnątrz:
waydroid app install PATH_TO_APK_FILE.apk ~/.local/share/waydroid/datajest montowany w/data~/.local/share/waydroid/data/media/0/to "Internal Storage" (/storage/emulated/0)- kopiowanie niektórych plików z
.local/share/waydroid/data/datamoże wymagać uprawnień root'a
Sieć
Możliwe jest przesyłanie wszystkich, bądź wybranych pakietów do proxy (np. mitmproxy) celem ich inspekcji. Można to uzyskać poprzez:
- użycie bridga systemowego
br0(konfiguracja/etc/network/interfaces.d/br0na HOST) wymaga ustawienialxc.net.0.link = br0w/var/lib/waydroid/lxc/waydroid/configna CHROOT - możliwość przesłania wybranych pakietów ip6 do proxy wymaga włączenia IPv6 na veth tworzonym przez LXC
- utworzyć wykonywalny plik
/usr/lib/waydroid/data/scripts/waydroid-veth-up.shz zawartościąecho 0 > /proc/sys/net/ipv6/conf/$6/disable_ipv6 - dodać
lxc.net.0.script.up = /usr/lib/waydroid/data/scripts/waydroid-veth-up.shdo/var/lib/waydroid/lxc/waydroid/config
- utworzyć wykonywalny plik
- UWAGA: zmiany w
/var/lib/waydroid/lxc/waydroid/configsą tracone - należy edytować także/usr/lib/waydroid/data/configs/config_3 /etc/network/interfaces.d/br0postaci (istotna jest konfiguracjatunifwmark:allow-hotplug br0 iface br0 inet6 auto up /etc/network/firewall.sh || true up echo 1 > /proc/sys/net/ipv6/conf/all/forwarding up ip tuntap add tun1 mode tun user rrp || true up ip link set tun1 up || true up ip -6 rule add fwmark 1 table 201 || true up ip -6 route add default dev tun1 table 201 || true iface br0 inet dhcp up /etc/network/firewall.sh || true up echo 1 > /proc/sys/net/ipv4/conf/all/forwarding up ip tuntap add tun1 mode tun user rrp || true up ip link set tun1 up || true up ip -4 rule add fwmark 1 table 201 || true up ip -4 route add default dev tun1 table 201 || true- fizyczny interfejst
enp7s0jest po prostu członkiem bridgabr0–/etc/network/interfaces.d/enp7s0:auto enp7s0 iface enp7s0 inet static address 0.0.0.0/0 up ip link add br0 type bridge up ip link set enp7s0 master br0 - kierowaniem wybranego ruchu do mitmproxy zajmuje się firewall