Warum kann ich Android x86-ausführbare Dateien nicht unter Linux ausführen?

Warum kann ich Android x86-ausführbare Dateien nicht unter Linux ausführen?

Ich versuche, Android-Apps auf Linux zu portieren (nicht lachen :) und bin auf ein Problem gestoßen. Beim Versuch, eine ausführbare Android-Datei ( app_process) auszuführen, nachdem ich die Ausführungsberechtigung hinzugefügt habe, ./app_processwird angezeigt, dass sie nicht existiert, obwohl cat ./app_processsie funktioniert.

Auch in meinem Dateimanager (Pantheon Files) zeigt die ausführbare Datei das Symbol der gemeinsam genutzten Bibliothek an.

Gibt es eine Möglichkeit, diese unter Linux auszuführen?

Antwort1

Android und Linux sind zwei verschiedene Betriebssysteme. Sie können nicht einfach eine ausführbare Datei von einem nehmen und sie auf dem anderen ausführen.

Die erste Hürde ist der Kernel. Android und Linux basieren auf demselben Kernel, haben aber einige unterschiedliche Funktionen. Insbesondere bietet AndroidBindemittel, die erst seit Version 3.19 im Mainstream-Kernel (dem in Linux-Distributionen enthaltenen) vorhanden sind. Eine reine Anwendung mit nativem Code verwendet möglicherweise keine Binder, die meisten Java-Apps jedoch schon.

Die zweite Hürde sind die dynamischen Bibliotheken. Wenn Sie eine dynamisch verknüpfte ausführbare Datei haben, ruft diese den dynamischen Linker auf. Android und Linux haben unterschiedliche dynamische Linker, und wenn der dynamische Linker nicht vorhanden ist,Sie erhalten den gleichen Fehler, als ob die ausführbare Datei selbst nicht vorhanden wäre.

Wenn Sie den dynamischen Linker und die dafür benötigten Konfigurationsdateien sowie die nativen Bibliotheken kopieren, sollten Sie die meisten nativen Programme ausführen können. Sie müssen den Großteil von kopieren /systemund die Kopie muss sich unter befinden /system.

Wenn Sie Java-Apps ausführen möchten, ist es komplizierter. Sie benötigen die Java-Laufzeitumgebung (Dalvik/ART) und die meisten Apps erfordern auch einige Android-Daemons (einige Apps mit nativem Code erfordern diese Daemons ebenfalls).

Das Ergebnis ist, dass die beiden Systeme zwar auf einem Kernel koexistieren können, dieser aber ein ausreichend aktueller Kernel oder ein Android-Kernel sein muss (ein Android-Kernel kann die meisten Linux-Anwendungen ausführen) undbeide Betriebssysteme müssen installiert sein– Sie können eine Anwendung nicht einfach von einem auf dem anderen ausführen.

Mir ist kein vorgefertigter Installer für Android auf Linux bekannt. Es gibt jedoch Installer für den umgekehrten Weg, insbesondereLinuxonAndroid.

Wenn das Ziel darin besteht, eine Android-App auf einem Linux-System auszuführen, dann ist der einfachste Weg, sie im Emulator auszuführen, der Teil desAndroid-Entwicklungstools.

verwandte Informationen