2009-10-28 6 views
40

Android est basé sur Linux; les applications Linux natives peuvent-elles être exécutées sur Android?Les applications Linux peuvent-elles être exécutées sous Android?

+6

Peut-être pourriez-vous clarifier votre question? En théorie, vous pouvez apprendre à un éléphant à danser, mais cela ne signifie pas que lorsque vous rencontrez un éléphant sauvage dans une jungle, il va danser pour vous. Demandez-vous la possibilité technique, et vous êtes prêt à écrire et à compiler du code, à enraciner votre appareil, etc., ou recherchez-vous une solution prête à l'emploi/à installer une seule application? –

+0

Il pourrait être plus facile de faire le contraire - en exécutant des paquets Android dans un système Linux. Cela pourrait être quelque chose à regarder de toute façon. – Rolf

Répondre

29

En général, pas. Les applications Android s'exécutent généralement dans une machine virtuelle de type Java en sandbox. Elles doivent donc être écrites en Java ou dans un langage compilant un bytecode de machine virtuelle utilisant l'API Android. Toutefois, la machine virtuelle fonctionne au-dessus du système d'exploitation Linux sous-jacent et il existe des moyens d'appeler le code natif. Alors, même s'il est techniquement possible d'exécuter des programmes Linux natifs, comme il y a un noyau Linux sous tout, la plupart des utilisateurs ne pourraient pas installer de telles applications ou les utiliser. (Si vous avez un accès root ou si vous construisez votre propre firmware, alors vous pouvez faire ce que vous voulez.)

+3

C'est une réponse plutôt indirecte. Oui, Android peut exécuter des applications Java, car il s'agit d'une distribution Linux fournie avec une machine virtuelle Java. Mais cette JVM est évidemment une application native, donc il y a au moins une application Linux native qui peut fonctionner sous Android/Linux. – MSalters

+17

En fait, Android ne vient pas avec une JVM, il est livré avec une machine virtuelle Dalvik. La machine virtuelle Dalvik est livrée avec une implémentation en langage Java compilée jusqu'au bytecode Dalvik, mais pas en bytecode JVM. Je crois qu'il y a aussi un outil qui peut convertir le bytecode JVM en dalvik bytecode. Wikipédia (comme d'habitude) a une très bonne introduction à Dalvik: http://en.wikipedia.org/wiki/Dalvik_virtual_machine –

+4

Je ne pense pas que ce soit une "réponse indirecte". Je comprends la question pour signifier "Un utilisateur typique peut installer des applications Linux natives sur Android." Je pense que la réponse à cette question est non, mais évidemment, comme Android s'exécute sur Linux, il y a des programmes Linux natifs en cours d'exécution. –

23

Android n'exécute pas X Windows, et il n'a pas beaucoup de bibliothèques GNU standard. Ainsi, puisque la plupart des applications linux natives nécessitent l'une ou l'autre, la plupart ne fonctionneront pas.

En outre, même les programmes Java peuvent être limités, car la version de Java dans laquelle les applications Android sont écrites est un sous-ensemble de la bibliothèque Java standard.

17

Pas directement, non. La bibliothèque d'exécution C d'Android, bionic, n'est pas compatible avec la libc GNU, que la plupart des distributions Linux utilisent.

Vous pouvez toujours essayer de recompiler vos binaires pour Android et prier.

+1

Rien ne vous empêche d'adapter votre code. Bionic a la plupart de ce que fait la glibc, et ce qui n'existe pas peut être implémenté. J'ai compilé même des choses comme imagemagick, GnuTLS, et ncurses pour android. – Wyatt8740

+0

Pourrait être possible compiler un badblocks pour un ARMv7 pour android? Pouvez-vous m'aider? – Milor123

2

Oui, ils le peuvent s'ils sont compilés sous un bras linux ou en utilisant un compilateur croisé. Le bras de Debian fonctionne de manière polyvalente, il y a aussi arm-eabi pour compiler sous linux x86 pour armer linux.

3

Vous pouvez obtenir un compilateur croisé ARM qui s'exécute sous Linux here. Vous pouvez également télécharger le NDK Android et compiler certaines applications en ligne de commande. Je n'ai aucune expérience personnelle de l'utilisation de C++ avec l'une ou l'autre solution, mais j'ai compilé quelques choses simples avec les deux. Je crois comprendre que le NDK n'est pas un compilateur C++ complet car il y a eu des plaintes selon lesquelles il ne compilera pas de code C++ commun.

Notez que depuis que je suis un nouvel utilisateur, je ne peux pas poster le lien NDK ...:/

+0

Voici un lien vers le NDK, voici en espérant qu'il est autorisé: http://developer.android.com/sdk/ndk/index.html – JimR

8

oui vous pouvez ;-)

la façon la plus simple est d'utiliser cette -> http://www.androidfanatic.com/community-forums.html?func=view&catid=9&id=2248

l'ancien lien est mort, il était un script d'installation Debian il y a une application pour ça sur le marché Android mais vous aurez besoin racine

+2

bel enthousiasme –

+1

Ce lien est mort. Il est utile de donner l'essentiel de la solution dans la réponse, donc c'est utile longtemps après que les liens soient morts. –

+0

https://play.google.com/store/apps/details?id=org.dyndns.sven_ola.debian_kit & hl = sk – sherif

3

une droid n'utilise que le noyau linux, ce qui signifie que la chaîne d'outils GNU comme gcc n'est pas implémentée dans android, donc si vous voulez lancer une application linux dans android, vous devez la recompiler avec la chaîne d'outils de google (NDK).

21

Oui, vous pouvez. J'ai installé une distribution Debian complète dans un environnement chroot-jail en utilisant debootstrap. (Vous avez besoin d'un appareil enraciné) Je cours maintenant ssh, apache, mysql, php et même un serveur de samba sous android sur mon htc-désir sans problèmes. Il est possible d'exécuter x applications en utilisant un serveur x distant via ssh. Il fonctionne même openoffice.org et firefox. Vous pouvez utiliser ceci: http://code.google.com/p/android-xserver/ pour lancer X-application sur localhost mais mon HTC-desire a un petit écran pour être productif :-) Mais il peut être utile sur un Eee Pad Transformer ou quelque chose comme ça.

+0

Hey, c'est une réponse valide. Cependant, essentiellement Android peut être augmenté pour exécuter des "applications Linux" et c'est ce que vous avez fait. – Rolf

2

Oui, ils peuvent. Si vous n'avez pas de téléphone/tablette rooté, alors vous pouvez télécharger c4droid here pour compiler vos applications. Ensuite, vous pouvez télécharger KBOX here de Kevin Boone pour exécuter le programme.

1

Enfer, bien sûr que oui, avec plusieurs limitations.

Android est une distribution Linux assez spéciale, sans suffixe habituel comme X11, et vous ne pouvez pas installer Apache2 avec apt-get. Mais si vous avez un compilateur croisé ARM, vous pouvez copier vos fichiers ELF sur l'appareil, et les exécuter depuis une application terminale ou si vous avez installé une application SSHD, vous pouvez même utiliser SSH depuis votre ordinateur de bureau pour accéder à l'appareil Android .

Pour copier et lancer un exécutable Linux natif, vous n'avez pas root votre appareil. C'est le point, où je suis, j'ai compilé mon propre petit serveur web à Android (et aussi pour webOS), il fonctionne, hallelujah.

Il vient les questions que je ne peux pas répondre:

  1. Mon petit utilisation webserver seulement stdlib et pthreads. Je n'ai aucune idée de comment utiliser les bibliothèques (natives Linux) est livré avec Android, il y en a des utiles, bien que je puisse vivre sans eux.

  2. Maintenant, je peux lancer mon application à partir d'une application de terminal à la main. Mais je ne sais pas, quelle est la meilleure façon de déployer de telles applications natives à Android. Je pense que je devrais écrire une petite application Android, qui lance le serveur et ne laisse pas s'arrêter automatiquement par le système (disons, comme les lecteurs de musique n'ont jamais été tués). En outre, si c'est un service, il devrait en quelque sorte commencé au démarrage. Je ne suis pas familier avec Android.

+0

Je pense que la meilleure méthode de déploiement serait une version modifiée de connectbot ou un autre émulateur de terminal FOSS avec vos binaires empaquetés avec. – Wyatt8740

1

Réponse courte, no. Longue réponse, vous pouvez exécuter l'application Linux si vous installez un logiciel. Pour éviter l'enracinement de votre appareil, vous pouvez essayer le combo GnuRoot et XSDL pour obtenir un environnement chroot minimal (en fait, il utilise proot pour activer une prison chrootée sans racine), ou obtenir l'application Debian Noroot, qui combine l'ancien deux applications dans un environnement de machine virtuelle unique. Les deux peuvent être récupérés sur Google Play.

Cependant, il y a quelques inconvénients: d'abord, le serveur X11 fourni par XSDL et DNR est une couche de compatibilité enroulée autour d'un port Android de bibliothèque SDL et de SurfaceFlinger. Cela signifie que les graphismes OpenGL avec accélération matérielle ne sont pas disponibles, et même le support audio nécessite des hacks. Ainsi, l'auteur choisit un environnement de bureau simple: XFCE4 adapté à la memmory basse et aucun support 3D. Le deuxième problème est l'incompatibilité de la machine virtuelle DNR de l'accès direct au matériel, car elle nécessite des privilèges root réels. Donc, vous ne pouvez pas graver de DVD, imprimer en utilisant des câbles USB, ... même les projets de l'auteur peuvent promettre une solution de contournement dans un avenir. Enfin, cette solution permet d'installer des programmes d'espace utilisateur comme LibreOffice, Gimp, Samba, ... pas de modules noyau-espace.

Même avec ces limitations, le DNR est un programme très puissant.

3

Oui, j'ai fait cela sur plusieurs machines enracinées J'ai mis un linux debian sur une carte SD par dd. i copier ce script http://jeanmichel.gens.free.fr/etc/install sur/system/bin

i ont pas encore réussi à lancer un serveur X, mais je peux utiliser Xwindows binaires via l'application Xserver android

je peux courir mettre à jour mon debian avec apt-get upgrade , exécutez un serveur apache avec PHP, exécutez un serveur ssh et tous les binaires sur un terminal, y compris la gestion des utilisateurs j'ai aussi un problème avec la gestion sémaphores s'il vous plaît me contacter si vous avez des problèmes

0

vous pouvez installer la distribution linux chroot à côté de Android android est basé sur li noyau nux. Si votre téléphone n'est pas rooté, vous pouvez utiliser fakeroot (le plus simple est d'utiliser l'application Debinan nonroot) même avec une interface graphique (avec l'application android X-server ou via VNC). Si vous avez un téléphone enraciné, vous pouvez installer une distribution presque entièrement fonctionnelle. Je pense que c'est la meilleure performance et les moindres limitations que vous pouvez obtenir avec Gentoo car tous les logiciels compilent à votre architecture de bras native et c'est la plus flexible, mais pas la plus facile. Vous pouvez être intéressé par ce post about installing Gentoo on android.

Questions connexes