Linux-Binaries auf Android ausführen

Oebbler

Oebbler

Erfahrenes Mitglied
136
Hallo,

ich nutze auf meinem PC einige Programme, die ich auf meinem Android-Smartphone auch gerne hätte, wie z.B. youtube-dl.
Wenn ich mir jedoch youtube-dl für ARMv7-Prozessoren herunterlade, funktioniert dies auf meinem Raspberry Pi 2 und auf meinem Cubieboard, nicht jedoch auf meinem Android-Smartphone. Gibt es einen Weg, diese und anere ARMv7-Binaries auf Android laufen zu lassen, ohne eine Linux-Distribution virtuell am Smartphone zu installieren?
 
Andoid ist nicht gleich Linux. Es setzt zwar insbesondere den Kernel drauf auf, aber die Anwendungsumbebung basierend auf Apps ist ja schon anders gelöst als über Linux-Distributionen. Insofern müsste das Programm als App verfügbar sein, damit es auf Android läuft.
 
Google mal "chroot debian android". Wenn du mit einer Raspberry klarkommst bekommst du vielleicht auch das geschaukelt. Eine Warnung, nicht jedes Android ist korrekt mit loop ausgestattet, daran kann es hängen falls das nicht funktionieren will.
[doublepost=1483743230,1483742754][/doublepost]Hier noch zwei links:
F-Droid
F-Droid
 
  • Danke
Reaktionen: Oebbler
magicw schrieb:
Insofern müsste das Programm als App verfügbar sein, damit es auf Android läuft.
Sicher? Programme wie z.B. die Busybox laufen auch ohne App direkt im Terminal. Ich nutze CM13.0 und kann daher direkt auf das Terminal zugreifen...
[doublepost=1483769425,1483769338][/doublepost]
rudolf schrieb:
Eine Warnung, nicht jedes Android ist korrekt mit loop ausgestattet, daran kann es hängen falls das nicht funktionieren will.
Das würde nichts machen. Da ich ohnehin meinen eigenen Kernel nutze, kann ich das ja noch implementieren, wenn es das nicht schon ist.
 
Oebbler schrieb:
Sicher? Programme wie z.B. die Busybox laufen auch ohne App direkt im Terminal
Naja in der busybox laufen Scripte. Das sind für mich eine spezielle Art von Programmen ggü. denen, die auf systemspezifisch compilierten Binaries laufen. (exe-Files in Windows oder die files im /bin von Linux.
Der dahinter liegende "Interpreter" aka busybox, der die Script-Befehle ausführt, ist aber wiederum eine App.

Pauschale Frage gibt hatl erst mal pauschale Antwort^^
 
Der Busybox-Installer schon, aber die Busybox selbst, die im "/system/bin"- oder "/system/xbin"-Verzeichnis liegt (bei einigen Kernels, wie z.B. bei meinem Elite-Boeffla-Kernel, ist sie schon in der Ramdisk enthalten), ist eine speziell für Android kompilierte Linux-Binary. Als Kernel-Entwickler sollte ich wissen, dass die Busybox selbst keine App, sondern eine ausführbare Binary ist. Bitte nicht mit Apps verwechseln, die die Busybox installieren.
Meine ürsprüngliche Frage war, wie man Linux-Binaries, die nicht speziell für Android kompiliert sind (wie es bei der Busybox, die ich über die Shell aufrufe, der Fall ist) trotzdem auf Android laufen lassen kann. Das mit der chroot-Umgebung, die rudolf vorgeschlagen hat, geht sehr stark in die richtige Richtung. Vielleicht ist diese chroot-Umgebung sogar so gut in Android integriert, dass ich von dieser aus auf meine Dateien auf der Speicherkarte zugreifen kann.
 
Ja, dieses Programm meine ich. Wenn ich es auf meinem Smartphone ausführen will, dann bekomme ich die Meldung, dass es nicht gestartet wird, weil Python fehlt. Nur läuft Python (die Linux-Version davon) auf meinem Smartphone nicht, obwohl ich es für die ARM-Architektur (armhf) heruntergeladen habe.
 
das enthält ein brauchbares python (2 oder 3) Termux – Android-Apps auf Google Play, musst du dort nur nachinstallieren, dann sollte es auch funktionieren (bzw. evtl. läst es sich sogar mit pip installieren)
(termux gibt es alternativ auch bei f-droid)

edit:
geht, einfach mit
pip install --upgrade youtube-dl
installieren
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: rudolf und Oebbler
Danke! Diese App ist genau das, wonach ich suche! Sie sollte standardmäßig in CM enthalten sein.
 
Screenshot_2017-01-09-04-44-43.png


Busybox-static auf Raspberry installiert, von dort auf das Android Tablet kopiert, und es läuft :)
Die Stericson Busybox von meinem Tablet läuft genauso auch auf dem Raspberry. Sind halt beide statisch gelinked.
 
Zuletzt bearbeitet:
Gibt es ein fertiges Stericson-Busybox-ZIP, was ich via TWRP installieren kann? Ich würde gerne einige Schritte beim Installieren von Nightlies. Ich wüsste auch gerne einen Meta-Installer haben, mit dem ich mehrere ZIPs unangetastet zusammenfassen kann.
 
Ach f… ich hatte danach gesucht, aber darüber bin ich nicht gestolpert. Super, danke. Wenn es jetzt noch eine Lösung für den Meta-Installer gibt…
 
rudolf schrieb:
Busybox-static auf Raspberry installiert, von dort auf das Android Tablet kopiert, und es läuft :)
Die Stericson Busybox von meinem Tablet läuft genauso auch auf dem Raspberry. Sind halt beide statisch gelinked.

Heißt das, dass eine statisch kompilierte Busybox für die ARM-Architektur auf Linux-Boards mit ARM-Prozessor und auch auf Android läuft?
Wenn ja, gilt das auch für andere Linux-Programme wie z.B. python oder ffmpeg?
Dann könnte ich mir theoretisch Termux sparen, das doch recht viel Speicherplatz frisst...
 
Hast du dir den screenshot nicht angesehen? Da läuft die Raspbian busybox auf Android. Schau mal genau auf die Versionsmeldung! Ich hab damit auch dinge wie top, ps, ifconfig getestet, geht.

Ein Linux besteht aus einem Kernel, einem Dateisystem, und mindestens einer shell. Du bekommst mit einem kernel, einer Ramdisk und einer Busybox bereits ein laufendes Linux zustande. Somit ist Android auch nur eine Linux Distibution. Aber:

1. Android nutzt für graphische Anwendungen nicht wie alle anderen den X-Server sonder seine eigene Mimik. Daher laufen graphische Linuxanwendungen nicht auf Android.

2. Android nutzt nicht die uas dem klassischen Unix entwickelte Ordnerhierarchie Filesystem Hierarchy Standard – Wikipedia , sondern eine eigene. Daher finden Linux Programme Dateien die sie brauchen oft nicht.

3. Fast alle Linux Distributionen sind mit GCC kompiliert und nutzten die gleichen DLL's (dynamic link libs), während Android seinen eigenen hat. Daher läuft die statisch gelinkte Busybox von Raspbian auch auf Android, die dynamisch gelinkte nicht.

Wenn du also auf Rasbian kompilierte und dynamisch gelinkte binaries unter Android nutzen willst, dann musst du auch die passsenden libs auf Android haben. Du kannst mit ldd schauen welche Libs ein binary will, diese libs können jedoch auch wieder andere nutzen. Bei Android musst du die libs dann irgendwo unterbringen, am besten eine zweite Partition auf der SD und die dann mounten. Auch das binary muss irgendwo hin. Bei meinem Screenshot könnte jemandem auffallen, dass ich ohne root die busybox aus /date/local/tmp aufrufe:) Das geht aber ab 5.0 nicht mehr. Da Android eigentlich alles noexec mounted, wirst du auch für die binaries einen Platz schaffen müssen.

Statisch gelinkte binaries gehen, aber sind sehr gross. Du solltest ruhig mal eine kompilieren um zu sehen was das ausmacht. Die Raspbian busybox ist z.B. statisch 1,55 MB aber dynamisch nur 0,68 MB gross.

So, jetzt hab ich dir mal eine Kurzanleitung geschrieben, ich bitte dich dir dann auch die Zeit zu nehmen und hier zu berichten was wie bei dir geklappt hat und was nicht.
 
Zuletzt bearbeitet von einem Moderator:
Bearbeitet von: cptechnik - Grund: Direkt-Zitat entfernt, Forenregeln! - Gruß cptechnik
  • Danke
Reaktionen: Oebbler
@Oebbler

Hier hat einer genauer beschrieben was ich mit dem chroot Linux meinte:
Lidroid OS
 
  • Danke
Reaktionen: Oebbler
rudolf schrieb:
Statisch gelinkte binaries gehen, aber sind sehr gross. Du solltest ruhig mal eine kompilieren um zu sehen was das ausmacht. Die Raspbian busybox ist z.B. statisch 1,55 MB aber dynamisch nur 0,68 MB gross.

Danke für diese ausfühliche Erklärung!
Ich habe das jetzt probiert und bemerkt, dass eine normal für Linux kompilierte Busybox tatsächlich ohne Anpassungen auf Android läuft, wenn ich sie statisch kompiliere. Mit ffmpeg ist es zum Glück dasselbe.
Um das auch starten zu können, habe ich ein init.d-Script erstellt, das die /system-Partition als exec remounted, weil dort diese beiden Binaries sind. Warum trotz des noexec-Flags die Binaries, die im System standardmäßig integriert sind, laufen, verstehe ich allerdings nicht.
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

somboku
  • somboku
Antworten
5
Aufrufe
380
Klaus986
K
KleinesSinchen
Antworten
3
Aufrufe
180
Meerjungfraumann
Meerjungfraumann
K
Antworten
23
Aufrufe
895
Klaus986
K
Zurück
Oben Unten