Es gibt zahlreiche Programme, um Android auf dem Computer auszuführen. Ein Beispiel sei da Blue Stacks. Allerdings sind diese Programme meist für Gaming ausgelegt, geben nicht so wirklich auf den ersten Blick preis, welche Android-Version da eigentlich vor sich hin werkelt und was daran modifiziert wurde und vor allem: Funktionieren sie bei mir nicht (sofern ein leeres Fenster nicht beabsichtigt ist).

Grund, sich mal darüber Gedanken zu machen, ob es solche Programme überhaupt braucht. Denn eigentlich gibt's ja mit Virtual Box eine gratis erhältliche Virtualisierungs-Lösung mit der man sogar Android virtualisiert auf dem Computer laufen lassen kann.

Wir brauchen...

Virtual Box und ein Android-Image von android-x86.
Die aktuellste Version, die ich hier organisieren konnte war android-x86_64-9.0-r2 (Aufschrei: "zu alt!" – "unsicher!". Ist mir Schnurzpipegal)
VirtualBox starten und mit "Neu" eine neue virtuelle Maschine anlegen.

Folgende Screenshots und Beschreibungen beziehen sich hierbei auf den "Geführten Modus" und nicht auf den "Experten Modus" (lässt sich über den Button links unten umschalten).

"Typ" sollte Linux sein und "Version" sollte Other Linux (64-bit) sein (sofern das 64bit-Image von android-x86.org heruntergeladen wurde, ansonsten 32bit). Name kann beliebig sein.

 
Speichergröße sollte mindestens 2048 MB sein
 
Wir wollen eine neue Festplatte erzeugen
 
Der Dateityp sollte keine Rolle spielen.
 
"dynamisch" spart Festplattenplatz
 
Hier sollten mindestens 10 GB eingestellt werden.
 
Die Virtuelle Umgebung wurde erzeugt. Über den Button "Ändern" müssen wir noch ein paar Parameter anpassen...
 
Unter System > Hauptplatine die "Hardware Uhr UTC" deaktivieren (hatte ich mal irgendwo als Tipp gegen Probleme gelesen; kann aber auch sein, dass man diese Option aktiviert lassen kann)
 
Unter System > Prozessor mindestens zwei Prozessoren zur Verfügung stellen.
 
Unter System > Beschleunigung als Paravirtualisierung "KVM" wählen.
 
Unter Anzeige > Bildschirm den Grafikspeicher auf Maximum setzen und als Grafik-Controller "VBoxSVGA" wählen.
 
Unter Netzwerk > Adapter 1 habe ich "Netzwerkbrücke" und "en1 (Airport)" gewählt, so dass die VM eine eigene IP vom Netzwerkrouter zugeteilt bekommt und ich von meinem Host-Computer über jene IP auf die VM zugreifen kann.
 
Unter Massenspeicher in der linken Spalte "leer" wählen und dann ganz rechts auf die blaue CD (oder was immer das darstellen soll) klicken und das ISO-Image wählen, welches von android-x86.org heruntergeladen wurde.
 
Dann sollte es in etwa so aussehen.

Das Fenster kann mit einem Klick auf "OK" geschlossen und die virtuelle Maschine mit einem Klick auf "Starten" gestartet werden.

 
Recht bald sollte jener Bildschirm erscheinen.

Mit den Cursor-Tasten "Advanced" auswählen und mit Return bestätigen.

 
"Auto_Installation" auswählen.
 
YES!

Danach dürfte es ein paar Minuten gehen, bis Android in der virtuellen Maschine installiert wurde.

 
Nach Beendigung können wir Android endlich starten.
 
Während Android startet/läuft, können wir nochmals im VirtualBox-Hauptfenster auf "Ändern" klicken und bei "Massenspeicher" das "virtuelle Medium aus dem Laufwerk entfernen", da wir das Installations-Image nun nicht mehr benötigen.
 
Im Fenster der Virtuellen Maschine sollte recht bald der Einrichtungsassistent erscheinen, den man auch vom Handy her kennt, wenn man es das erste Mal in Betrieb nimmt.
 
Ich bin mir nicht sicher, ob die Suche nach WLANs ggf. übersprungen werden kann, da Android x86 automatisch die Netzwerkverbindung des Computers übernimmt.

Um sicher zu gehen oder bei Problemen "Alle WLANs anzeigen" auswählen...

 
...und "VirtWifi" wählen.

Damit sollte die Netzerkverbindung auf jeden Fall klappen.

 

Tipps

  • Beim Einrichtungsassistenten konnte ich ums Verrecken kein @ eingeben, um mein Google-Konto einzurichten.
    Hier hatte es geholfen, auf die US-Tastatur umzustellen und dann das @ mit der Tastenkombination Shift-2 einzugeben.
  • Mit der Tastenkombination alt-F1 und alt-F7 lässt sich zwischen Kommandozeile und Android-UI hin und her schalten.

  • IP-Adresse des Android-Systems in Erfahrung bringen:
    Mit alt-F1 zur Console wechseln, ifconfig eingeben und nachher wieder mit alt-F7 zurück ins Android-UI wechseln.

  • Android neustarten oder herunterfahren:
    Einfach das Fenster der virtuellen Maschine schließen. Im darauffolgenden Dialog auswählen, dass das Shutdown-Signal gesendet werden soll. Darauf erscheint der von Android bekannte Herunterfahren/Neustart-Dialog im Fenster der virtuellen Maschine

  • Das installierte Android ist übrigens gerootet!

Magisk

Da das installierte Android gerootet ist, wollte ich Magisk installieren, um den Root-Status vor einigen Programmen zu verstecken und den SafetyNet-Test zu bestehen.

Kleiner Spoiler: Magisk konnte ich installieren, aber das mit dem Root-Hide und SafetyNet hatte bei mir nicht funktioniert.

Wer sich trotzdem dafür interessiert, wie man Magisk installiert:

Vorab

Entweder Virtuelle Maschine klonen oder einen Sicherungspunkt erstellen. Falls etwas schief geht, hat man so immerhin schnell wieder die frühere, funktionierende Version in petto.

Methode 1

MagiskOnEmulator Ein paar Skripte, die alles Notwendige mit wenigen Eingaben auf der Kommandozeile erledigen.

Hatte bei mir nicht funktioniert.
Android bekam beim Neustart eine Kernel Panic.

Mag daran liegen, dass diese Skripte das letzte Mal mit Android 8 getestet wurden.

Methode 2

Frei nach dieser Seite.

Wir benötigen:

  • Auf dem Computer die Android Platform tools / ADB Tools (Download für Mac)
  • Magisk (Download hier)
  • Ein Linux-System. Ich habe in VirtualBox auch eine virtuelle Ubuntu Maschine und jene benutzt
  • Um einiges mehr Zeit als bei Methode 1

Konventionen:

  • "Der Computer"/"Der Host" ist bei mir der Host, auf dem VirtualBox läuft und von welchem aus ich auch per Kommandozeile auf die virtuelle Android-Maschine und die virtuelle Ubuntu-Maschine zugreife
  • Die virtuelle Android-Maschine hat im Folgenden beispielhaft die IP 192.168.178.99
  • Die virtuelle Ubuntu-Maschine hat im Folgenden beispielhaft die IP 192.168.178.98
  • Eigentlich kann man auch gleich auf dem virtuellen Linux-System die Android Platform tools installieren und spart sich das Datei-Rumgeschiebe zwischen Host und Linux-System. Oder das Host-System ist sowieso ein Linux-System, dann kann man sich den Schritt ebenso sparen. Im Folgenden greife ich ausschließlich von meinem Host-Mac auf Android zu und verwurschtel den Kernel auf dem virtuellen Linux.

1. Aktuellen kernel und ramdisk aus Android holen

Am Host auf der Kommandozeile eine adb-Verbindung herstellen (installierte Android Platform tools vorsusgesetzt; IP:Port können abweichen), dann die System-Partition von Android mounten und die benötigten Dateien zum Host-System holen

adb start-server
adb connect 192.168.3.99:5555

# System mounten
adb -e shell "mkdir /data/local/tmp/root"
adb -e shell "su -c 'mount /dev/block/sda1 /data/local/tmp/root'"

# Die gesuchten Dateien sollten sich in /data/local/tmp/root/android-9.0-r2 befinden
# (Bei neueren Android x86 Versionen wird der Verzeichnisname abweichen)
# Mit einem ls mal einen Blick in das Verzeichnis werfen, ob kernel
# und ramdisk.img auch tatsächlich dort sind
adb -e shell "ls /data/local/tmp/root/android-9.0-r2"
#Ausgabe optimalerweise:
#data
#initrd.img
#kernel
#ramdisk.img
#system.sfs

# Nun die Dateien auf den Host holen.
adb pull /data/local/tmp/root/android-9.0-r2/kernel ~/
adb pull /data/local/tmp/root/android-9.0-r2/ramdisk.img ~/

# Von hier aus schiebe ich die Daten noch eines weiter
# auf die virtuelle Ubuntu-Maschine
scp kernel ubuntuuser@192.168.178.98:~
scp ramdisk.img ubuntuuser@192.168.178.98:~

2. Auf dem Linux-System erstellen wir aus kernel und ramdisk eine boot.img

Nun sind wir auf der Kommandozeile des Linux-Systems:

# android-tools-mkbootimg und abootimg installieren
sudo apt install android-tools-mkbootimg abootimg

# kernel + ramdisk.img => boot.img
mkbootimg --kernel kernel --ramdisk ramdisk.img --output boot.img

# Zurück damit zum Host
scp boot.img hostuser@192.168.178.100:~/

3. Erstelltes boot.img und Magisk auf Android-System schieben

Im Folgenden verwende ich den Dateinamen Magisk-v25.2.apk – das war zum Zeitpunkt dieses Artikels die Aktuellste Version, die man hier herunterladen konnte.

Auf dem Host:

adb -e push ~/Magisk-v25.2.apk /sdcard/Download
adb -e push ~/boot.img /sdcard/Download

4. boot.img patchen

Dies können wir auf unserem virtuellen Android erledigen (alternativ auch auf einem Handy, auf welchem Magist installiert ist).

Dazu im virtuellen Android Magisk installieren, welches wir gerade eben in den Download-Ordner gepusht hatten. Sollte mit dem standard Dateimanager von Android auffindbar und installierbar sein.

Dann Magisk öffnen und auf "Installieren" tippen (was nicht wirklich etwas installiert).
 
Hier kann man gleich zum nächsten Schritt
 
"Eine Datei auswählen und patchen" antippen
 
Nun die boot.img im Download-Verzeichnis auswählen
 
Los geht's!
 
Dies sollte hoffentlich auch nach kurzer Zeit abgeschlossen werden.
Das gepatchte boot.img befindet sich unter dem hier im Log angegebenen Dateinamen im Download-Verzeichnis
 

5. Gepatchte boot.img zurück zum Host holen...

adb -e shell "ls /sdcard/Download"
# In meinem Fall heißt die gefundene Datei magisk_patched-25200_f5fiw.img
adb pull /sdcard/Download/magisk_patched-25200_f5fiw.img ~/

# Und dann gleich ab zum Linux-System damit!
scp magisk_patched-25200_f5fiw.img ubuntuuser@192.168.178.98:~

6. ...und auf dem Linux-System wieder in kernel+ramdisk "splitten"

abootimg -x magisk_patched-25200_f5fiw.img
# "zImage" in "kernel" umbenennen und "initrd.img" in "ramdisk.img" umbenennen
mv zImage kernel
mv initrd.img ramdisk.img

# Das Folgende dürftet ihr schon geahnt haben: Zurück zum Host damit!
# Vorher dort die alten beiden Dateien, die wir uns mal ursprünglich
# von Android geholt hatten, löschen, damit nichts durcheinander kommt!
scp kernel hostuser@192.168.178.100:~/
scp ramdisk.img hostuser@192.168.178.100:~/

7. Gepatchte Dateien auf das Android-System übertragen

Auf dem Host...

# Die alten beiden Dateien im Android System überschreibe ich nicht einfach.
# Die benenne ich um. Man weiß ja nie...
adb -e shell "su root mv /data/local/tmp/root/android-9.0-r2/kernel /data/local/tmp/root/android-9.0-r2/kernel.old"
adb -e shell "su root mv /data/local/tmp/root/android-9.0-r2/ramdisk.img /data/local/tmp/root/android-9.0-r2/ramdisk.img.old"

# Nun die beiden neuen Dateien ins Download-Verzeichnis pushen
# Wegen Berechtigungsproblemen kann ich sie nicht direkt
# nach /data/local/tmp/root/android-9.0-r2/ pushen
adb -e push kernel /sdcard/Download
adb -e push ramdisk.img /sdcard/Download

# Nun an die letztendliche Position schieben
adb -e shell "su root mv /sdcard/Download/ramdisk.img /data/local/tmp/root/android-9.0-r2/ramdisk.img"
adb -e shell "su root mv /sdcard/Download/kernel /data/local/tmp/root/android-9.0-r2/kernel"

Allerdings stimmen die Datei-Berechtigungen noch nicht.

Mal alle Dateien mit ihren Berechtigungen auflisten lassen und man wird sehen, dass die Berechtigungen von kernel.old andere sind, als bei (dem neuen) kernel

adb -e shell "ls -la /data/local/tmp/root/android-9.0-r2/"
total 940792
drwxr-xr-x  3 root   root           4096 2022-10-27 10:41 .
drwxr-xr-x  5 root   root           4096 2022-10-25 20:14 ..
drwxrwx--x 37 system system         4096 2022-10-25 20:15 data
-rw-r--r--  1 root   root        1358743 2022-10-25 20:14 initrd.img
-rw-rw----  1 root   sdcard_rw   7511040 2022-10-27 10:41 kernel
-rw-r--r--  1 root   root        7511040 2022-10-25 20:14 kernel.old
-rw-rw----  1 root   sdcard_rw   2367433 2022-10-27 10:41 ramdisk.img
-rw-r--r--  1 root   root        1914143 2022-10-25 20:14 ramdisk.img.old
-rw-r--r--  1 root   root      942682112 2022-10-25 20:15 system.sfs

Das wollen wir noch ändern:

adb -e shell "su root chown root:root /data/local/tmp/root/android-9.0-r2/ramdisk.img"
adb -e shell "su root chown root:root /data/local/tmp/root/android-9.0-r2/kernel"
adb -e shell "su root chmod 644 /data/local/tmp/root/android-9.0-r2/ramdisk.img"
adb -e shell "su root chmod 644 /data/local/tmp/root/android-9.0-r2/kernel"

Nun kann man Android neu starten und danach sollte Magisk aktiv sein.

Es empfiehlt sich, in den Magisk-Einstellungen Zygisk zu aktivieren.

Danach kann man die "Verweigerungsliste" (die Programme, die root nicht sehen sollten) verwenden.

War bei mir allerdings nicht erfolgreich. Die Programme hatten den root trotzdem gesehen.

Außerdem kann ich keine Module installieren. Nach Installation und Neustart werden keine installierten Module angezeigt.