Viele Dienste sind mittlerweile nur noch voll funktionsfähig, wenn man die App nutzt, denn besten Falls gibt es noch ein schlechtes Webfrontend. Geht euch geht diese „Mobile Only“ Mentatlität von viele Anwendungen auf die nerven? Hier gibt es gute Nachrichten.
Die Software Anbox macht sich die Tatsache zu nutzen, dass Android im Unterbau Linux verwendet und kapselt diese einfach in einem Linux Container LXC ein. Das hat einige Vorteile:
- Kein Overhead für Hardwareemulation
- Durch das Kapsel in einen Container ist das übrige System „sicher“ vor Angriffen
- Theoretisch sind viele verschiedene Instanzen möglich
Anbox befindet sich aktuell in einem Alpha Stadium und dessen credo nur freie Software zu verwenden ist löblich aber verhindert aktuell noch einen sinnvollen Einsatz, da z.B. keine Unterstützung für ARM Anwendungen besteht.
Update:
Mittlerweile habe ich alles in ein Script gepackt um nicht bei jedem neuen Build die Installation erneut durch führen zu müssen.
Den Download findet ihr hier:
https://github.com/geeks-r-us/anbox-playstore-installer/raw/master/install-playstore.sh
Bug Reports bitte über GitHub.
Im folgenden wird erklärt wie man Anbox installiert und sich ein Android mit PlayStore und ARM Unterstützung manuell baut.
Setup
Anbox ist über das SNAP System für Ubuntu verfügbar:
$ snap install --classic anbox-installer $ anbox-installer
Nach einem neustart ist es im Menü unter Anbox verfügbar.
Wenn die Anwendung nicht erscheint oder sich wieder schließt liegt das meist daran, dass der session-manager nicht läuft. Dieser kann mit folgendem Befehl gestartet werden:
$ anbox session-manager $ anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
Wenn keine Netzwerkverbindung hergestellt werden kann liegt das meist daran, dass kein Netzwerkadapter angelegt wurden:
$ ifconfig anbox0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.250.1 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::583b:2aff:fe6f:88b3 prefixlen 64 scopeid 0x20<link> ether fe:d1:aa:6e:66:bd txqueuelen 1000 (Ethernet) RX packets 5206 bytes 807502 (807.5 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8618 bytes 10883657 (10.8 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Fehlt dieser kann er wie folgt angelegt werden:
$ sudo /snap/anbox/current/bin/anbox-bridge.sh start
Wenn es dann immer noch nicht geht geht hilft vielleicht folgendes:
$ adb shell $ su $ ip route add default dev eth0 via 192.168.250.1 $ ip rule add pref 32766 table main $ ip rule add pref 32767 table local
Android anpassen
Es werden die folgenden Veränderungen durchgeführt:
- Play Store installiert
- libhuodini für ARM Unterstützung installiert
- Geräte Features angepasst
zunächst legen wir uns ein Arbeitsverzeichnis an und kopieren das originale Android Image dort hin:
$ mkdir ~/anbox-work $ cd ~/anbox-work $ cp /snap/anbox/current/android.img .
Danach entpacken wir das Image. Um die Berechtigungen zu erhalten muss dies mit root-Rechten erfolgen:
$ sudo unsquashfs android.img $ cd squashfs-root
Die entpackten Daten liegen nun in: ~/anbox-work/squashfs-root.
PlayStore
PlayStore und Co kann man bei opengapps.org herunterladen.
Wie benötigen die Variante x86_64 für 7.1, mini reicht hier aus.
Das heruntergeladene Archiv enthält weitere Archive, davon werden die folgenden benötigt:
- Phonesky
- GoogleLoginService
- GoogleServicesFramework
- PrebuiltGmsCore
Diese Archive müssen entpackt werden und der Ordner mit dem gleichen Namen welche die .apk Datei enthält muss mit root-rechten nach system/priv-app kopiert werden. Z.B. so:
$ sudo cp ./Phonesky ~/anbox-work/squashfs-root/system/priv-app/
nachdem alle 4 hinzugefügt wurden müssen noch die Berechtigungen angepasst werden:
$ cd ~/anbox-work/squashfs-root/system/priv-app/ $ sudo chown -R 100000:100000 Phonesky GoogleLoginService GoogleServicesFramework PrebuiltGmsCore
libhuodini
Huodini ist eine Bibliothek welche Befehle für den ARM Prozessor on-the-fly in Befehle für x86 Prozessoren übersetzt und somit die Ausführung von ARM Anwendungen erlaubt,
Im Netz finden sich viele Versionen davon. Ich habe „ARM_Translation_Marshmallow.zip“ verwendet, da es noch keine für Android 7 gab.
Auch diese wieder mit root-rechten in das squashfs-root Verzeichnis entpacken und ggf. die Berechtigungen anpassen.
Da das Android Image von Anbox sehr wenige Features akiviert hat sieht die Auswahl im Play Store recht bescheiden aus:
Mehr Features
Die diese können in der Datei: squashfs-root/system/etc/permissions/anbox.xml jedoch angepasst werden:
Nach dem Eintrag:
<feature name=“android.hardware.ethernet“ />
werden einfach die folgenden noch hinzugefügt:
<feature name="android.hardware.touchscreen" /> <feature name="android.hardware.audio.output" /> <feature name="android.hardware.camera" /> <feature name="android.hardware.camera.any" /> <feature name="android.hardware.location" /> <feature name="android.hardware.location.gps" /> <feature name="android.hardware.location.network" /> <feature name="android.hardware.microphone" /> <feature name="android.hardware.screen.portrait" /> <feature name="android.hardware.screen.landscape" /> <feature name="android.hardware.wifi" /> <feature name="android.hardware.bluetooth" />
Nun noch die folgenden Einträge entfernen:
<unavailable-feature name="android.hardware.wifi" /> <unavailable-feature name="android.hardware.bluetooth" />
In der /system/build.prob müssen noch die unterstützen Prozessortypen angepasst werden:
ro.product.cpu.abilist=x86_64,x86,armeabi-v7a,armeabi ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
Wenn man 3D Beschleunigung verwenden will muss am ende der Datei noch folgendes hinzugefügt werden:
# Report GLES as available # 131072 ix 0x20000 in hex, which means GLES 2.0 ro.opengles.version=131072
Zum Schluss packen wir alles in ein neues Image:
$ cd ~/anbox-work $ rm android.img $ sudo mksquashfs squashfs-root android.img -b 131072 -comp xz -Xbcj x86
Nun kann das neue Image an den Container Manager gegeben werden:
$ sudo anbox container-manager --data-path=~/anbox-data --android-image=~/anbox-work/android.img
Anschließend kann anbox wie gehabt mit dem neuen Image gestartet werden.
Manchmal kommt es mit dem gms Dienst wegen fehlender Berechtigungen zu Problemen. Das kann über adb behoben werden:
$ adb shell > pm grant com.google.android.gms android.permission.ACCESS_FINE_LOCATION
Wenn alle Einträge richtig sind kann man sich nun anmelden und bekommt die gewohnte fülle des Play Stores.
Leider funktionieren noch nicht alle Apps problemlos, da einige Funktionen, wie z.B. das rotieren des Bildschirms noch nicht implementiert sind.
Hallo,
Ich habe „open_gapps-x86_64-7.1-mini-20170825“ untergeladen und unzipped. Aber… ich kann die Dateien:
Phonesky, GoogleLoginService, GoogleServicesFramework und PrebuiltGmsCore nicht finden:
# updatedb
# locate oogle | grep ervice | grep ogin
Merci fürs hilfe!
Die Ordner sind unter /core noch mal in den tar.lz Dateien verpackt. Dort gibt es dann unter anderem Phonesky/Phonesky.apk welches kopiert werden muss.
Ich habe alles entpackt aber mein Terminal sagt mir er findet das Verzeichnis nicht, obwohl ich weiß das es da ist.
Benutze Ubuntu 16.04 LTS. Also das kopieren funktioniert irgendwie nicht.
Versuche doch das Installer Script dort läuft alles automatisch ab
They are inside other files. Try descompressing these files, that are inside the „Core“ folder:
gmscore-x86_64
gfscore-all
gsflogin-all
vending-x86_64
All those files have the *tar.lz extension.
Danke für die ausführliche Anleitung!
Könntest Du mir bitte beim Starten des Images helfen?
Ich konnte mein eigenes Image bauen. Leider kann ich es nicht starten. 2 Fälle habe ich.
Fall 1:
1. Ich stoppe ich den Container mit
sudo /snap/anbox/current/bin/anbox-bridge.sh start
2. Ich starte mein Image mit
sudo anbox container-manager –android-image=anbox-work/android.img –data-path=anbox-data
3. Anbox schmeisst den Fehler:
anbox session-manager
[ 2017-09-04 08:25:07] [client.cpp:49@start] Failed to start container: Failed to start container: Failed to start container
[ 2017-09-04 08:25:07] [session_manager.cpp:162@operator()] Lost connection to container manager, terminating.
[ 2017-09-04 08:25:07] [daemon.cpp:58@Run] Container is not running
terminate called after throwing an instance of ’std::bad_alloc‘
what(): std::bad_alloc
Aborted (core dumped)
Fall 2:
1. Ich lasse den Container laufen.
2. Und kriege den Fehler:
sudo anbox container-manager –android-image=anbox-work/android.img –data-path=anbox-data
[ 2017-09-04 08:34:30] [container_manager.cpp:59@operator()] You are running the container manager manually which is most likely not
[ 2017-09-04 08:34:30] [container_manager.cpp:60@operator()] what you want. The container manager is normally started by systemd or
[ 2017-09-04 08:34:30] [container_manager.cpp:61@operator()] another init system. If you still want to run the container-manager
[ 2017-09-04 08:34:30] [container_manager.cpp:62@operator()] you can get rid of this warning by starting with the –daemon option.
[ 2017-09-04 08:34:30] [container_manager.cpp:63@operator()]
[ 2017-09-04 08:34:30] [container_manager.cpp:98@operator()] bind: Address already in use
Wie kann ich das Image im Container austauschen?
Danke im Voraus!
Hallo
du musst die laufende Anbox erst stoppen, aktuell sind mehrere Instanzen noch nicht unterstützt. Also Fall 1./anbox-work bzw anbox-data
Ich würde mal versuchen den absoluten Pfad zum Image / Daten Verzeichnis angeben. Ich vermute /home/
Bei Ubuntu liegen die Snap Pakete unter /var/lib/snapd/snaps als Images vor, die du bearbeiten müsstest um dein Image dort hinein zu bekommen.
Hierfür musst du es anstatt read-only(ro) als read-write (rw) mounten. Das geht in /etc/systemd/system/snap-anbox-xx.mount
After making the change in the snap-anbox-64.mount file, how do I remount the image with the new permissions?
see comment of rodrigo cunha below.
you must edit anbox squashfs image apply the new android.img.
anbox snap image location: /var/lib/snapd/snaps/anbox_60.snap
unsquash it, remove the old android.img and copy the new one.
rebuild the squashfs image with the same name „anbox_60.snap“
umount old image:
$ umount /snap/anbox/60
copy the new anbox_60.snap image to /var/lib/snapd/snaps/
reboot
enable anbox again:
sudo snap enable anbox
Is there any chance you could upload your already modded android.img? Ive tried this about 7 times and it still isnt working for me
I’m not sure if publishing such image is legal because of the huodini library and the google policy (which also prevent anbox of releasing such an image)
Houdini library shouldn’t be a problem, it’s a foss licensed.
Anbox doesn’t want to do it for many reasons, legal as well as not wanting to give support to users. Mine made after this guide works reasonably well, only sometimes anbox seems to shut down/crash randomly.
Let me know if anybody wants it uploaded, though you will still have to manually add it to your snap or I would have to upload the whole snap.
I haven’t found many information on the houdini lib. Any links I could add?
If you can provide links to prepaird imaages I will add links to them.
Danke für die Anleitung
Habe play store am Laufen. Auch Download der Apps geht. Allerdings scheinen arm basierte Apps nicht zu starten, zb arm bitcoin miner oder bisecur. Evtl habe ich im libhoudini setup etwas falsch? Starten arm basierte apps in Ihrer anbox installation?
Es kann sein, dass diese Apps Funktionen verwenden die es in Marshmallow noch nicht gab und deshalb auch nicht richtig ausgeführt werden können.
Ich habe es mit ein paar Apps wie Instragram etc. versucht und dort ging es.
Hallo,
Danke fuer den Tutorial!
Du hast geschrieben:
„Im Netz finden sich viele Versionen davon. Ich habe „ARM_Translation_Marshmallow.zip“ verwendet, da es noch keine für Android 7 gab.
Auch diese wieder mit root-rechten in das squashfs-root Verzeichnis entpacken und ggf. die Berechtigungen anpassen.“
Unter squashfs-root gibt es aber schon einen Ordner mit den gleichen Name „system“. Soll man da den Ordner von ARM_Translation umbenennen? oder wie hast du das gemeint?
Die Daten die im Zip im Ordner system liegen sind müssen in den existierenden Ordner kopiert werden.
Hi,
I habe versucht, dass Script auszuführen, aber zum Schluss kommt ein Fehler, und ich weiß nicht, wie ich den debuggen soll. Mein System ist Kubuntu 17.10 64bit:
install-playstore.sh: 152: install-playstore.sh: Bad substitution
Irgendne Idee, was das sein kann?
Gruß!
Björn
Ohne komplette Log-Ausgabe ist das schwierig… Kannst du die bitte posten?
Am besten ein Issue auf Github aufmachen.
Hi Björn,
du hast das Skript warscheinlich mit „sh“ statt mit „bash“ ausgeführt und daher funktioniert der Vergleich an der Stelle im Skript.
Am besten ein „chmod u+x install-playstore.sh“ machen und dann das Skript mit „./install-playstore.sh“ ausführen.
Gruß,
Datafreak
Help plis, Arch linux, install from aur and git not using snap,
My problem is this lines
cd /var/lib/snapd/snaps
#In arch use /var/lib/anbox
until $SUDO systemctl stop snap.anbox.container-manager.service
do
sleep 10
done
for filename in anbox_*.snap //no working no found anbox_* or anbox*
Hi! I ran the automated script but the installation gets stuck on installing phonesky.apk. it just seems to be stuck there forever.
I’m running the script as root
please help thanks
It’s due to android-x86 removed the huodini package from their site and we have no new mirror right now
Hi,
zunächst vielen Dank für das Skript. Mit der aktuellen Version von Anbox funktioniert der PlayStore ohne Probleme und Houdini wird korrekt entpackt. Jedoch bekomme ich keine ARM App zum Laufen (bsp. Instagram).
Eine kurze Recherche zeigt in default.prop den Eintrag
ro.dalvik.vm.native.bridge=0 -> habe ich entfernt.
Weiterhin habe ich versucht die build.prop um die Zeile
ro.product.cpu.abilist64=x86_64,arm64-v8a zu erweitern.
Leider ohne Erfolg. Hast du evtl eine Idee, was man noch versuchen könnte?
Zum Einsatz kommt bei mir Linux Mint 19.1 Tessa
CPU: AMD Ryzen 5 3600 (falls interessant)
Impressive work – script runs like a charm!
Only when I try to log in to the play store the Google play app is saying: „Could not sign, there is a problem communicating with Google servers. Try again later.“
Unfortunately later does not work either… does Google block login from Anbox instances for some reason?
Thx.
You need to grant all permissions to play services and playstore afterwards it shoud work.
Many thanks! – will try once back home…
HOUDINI_Y_URL=“http://dl.android-x86.org/houdini/7_y/houdini.sfs“
HOUDINI_Z_URL=“http://dl.android-x86.org/houdini/7_z/houdini.sfs“
those are dead 🙁
Check github repo for fixed urls
Hallo,
für mich ist das alles recht kompliziert!
Ich hab das script runtergeladen, wenn ich es ausführe passiert aber gar nichts. D.h. der prompt kommt nach 2sec wieder aber keine meldung, nichts.
Woran kann das liegen ? Hab es auch mit sudo versucht geht auch nicht.
Hello,
in my case, the sh script to install the google store did not work. It simply crashed without any error message.
I debugged it and found out that the command
ANBOX=$(which anbox)
made it die silently.
I then replaced this line with
ANBOX=“/snap/bin/anbox“, which is the path to anbox on my machine (I guess it is this path on 99% of the installations).
After this quick-and-dirty fix, the script executed fine and I have google play store installed, I was able to login and install an app that I had previously purchased.
Thank you very much.
Hello, how do I uninstall script?