Écrire des applications en C ou C ++ pour Android? [fermé]
286
J'essaie de développer / porter un jeu sur Android, mais il est en C et Android prend en charge Java, mais je suis sûr qu'il doit y avoir un moyen d'obtenir une application C là-dessus, quelqu'un sait-il un moyen d'y parvenir?
Le G1 ne permet pas l'accès root par défaut, et il y a beaucoup de restrictions en place concernant ce qui peut être exécuté en dehors de l'environnement 'Android'. Je n'aurais pas beaucoup d'espoir de trouver un moyen d'exécuter du code natif depuis Android.
Cogsy
2
mais j'ai téléchargé DOOM pour Android sur le marché. Donc ça devrait être faisable
pour le code .net / c # et Android, consultez xamarin
bbqchickenrobot
41
Le NDK Android est un ensemble d'outils qui vous permet d'implémenter des parties de votre application en code natif, en utilisant des langages tels que C et C ++. Pour certains types d'applications, cela peut vous aider à réutiliser des bibliothèques de code écrites dans ces langages.
Pour plus d'informations sur la mise en route du développement natif, suivez ce lien .
Des exemples d'applications peuvent être trouvés ici .
J'espère que les informations seront mises à jour sur la page des groupes Google ( http://groups.google.com/group/android-ndk ), car elle indique qu'elle n'a pas encore été publiée.
Je ne sais pas où obtenir un téléchargement simple, mais j'ai entendu dire que vous pouvez obtenir une copie du NDK à partir du référentiel Git de Google sous la branche beignet.
La position officielle semble être que ce n'est pas quelque chose que vous voudriez "faire". Voir ce fil sur la liste des développeurs Android. Google envisage d'utiliser Android sur une variété d'appareils différents (CPU, écrans, etc.). La meilleure façon d'activer le développement est donc d'utiliser du code managé (portable) qui cible la machine virtuelle Dalvik. Pour cette raison, le SDK Android ne prend pas en charge C / C ++.
Android comprend un ensemble de bibliothèques C / C ++ utilisées par divers composants du système Android. Ces capacités sont exposées aux développeurs via le cadre d'application Android.
Le cadre d'application géré semble être superposé à ces bibliothèques. La page continue pour lister les bibliothèques C / C ++: bibliothèque C standard, média, 3D, SQL Lite et autres.
Il vous suffit donc d'une chaîne de compilation qui compilera C / C ++ vers le CPU approprié (ARM, dans le cas du G1). Vous trouverez ici de brèves instructions sur la façon de procéder .
Ce que je ne sais pas, c'est où trouver les descriptions des API que ces bibliothèques fournissent. Je suppose qu'il peut y avoir des fichiers d'en-tête enterrés quelque part dans le SDK, mais la documentation peut être incomplète / manquante. Mais je pense que c'est possible!
J'espère que c'est utile. Pour mémoire, je n'ai pas écrit d'applications Android natives - juste quelques applications gérées simples.
Je m'attends à ce que cette méthode soit rendue obsolète par le NDK, mais elle pourrait ne pas l'être si certains réseaux ou quelque chose ne permettent pas aux gens de mettre à niveau leurs téléphones.
ce qui est bon pour comprendre l'utilisation de NDK pour écrire une application en c et c ++ pour android.
Si vous souhaitez simplement compiler n'importe quel jeu natif basé sur une console et les exécuter sur Android, cet article a montré 3 méthodes pour le même.
1: Compilation statique à l'aide d'une chaîne d'outils autonome
2: Compilation croisée à l'aide de la chaîne d'outils Android NDK
3: Compilation croisée à l'aide du code source AOSP
lien 404 introuvable. C'est toujours une bonne idée de mettre du contenu de la publication originale dans la réponse au cas où le propriétaire du site gagnerait à la loterie, divorcerait de sa femme et déménagerait aux Bahamas.
"Le fait que seul le langage Java soit pris en charge ne signifie pas que vous ne pouvez pas développer d'applications dans d'autres langages. Cela a été prouvé par de nombreux développeurs, hackers et experts en développement d'applications pour mobile. Les gars d'Elements Interactive BV, la société derrière Edgelib , a réussi à exécuter des applications C ++ natives sur la plate-forme Android, même si à cette époque il y a encore de nombreux problèmes d'affichage et de son… etc. Cela inclut le jeu S-Tris2 et une démo d'animation 3D d'Edgelib. "
Veuillez noter que le NDK ne vous permet pas de développer des applications natives uniquement. Le runtime principal d'Android reste la machine virtuelle Dalvik.
Je ne connais pas de tutoriel mais un bon outil de développement: Airplay SDK d'Ideaworks Labs. (Récemment renommé " Marmelade ") En utilisant C / C ++, vous pouvez créer des applications pour Windows Mobile, iPhones, Android. Le seul composant que je n'aimais pas était le compositeur GUI - un buggy, mais vous pouvez toujours le remplacer par le Bloc-notes.
Vous pouvez télécharger c4droid, puis installer le plugin GCC et installer sur votre SD. Du shell, je traverse simplement le répertoire où se trouve le binaire GCC, puis je l'appelle pour créer un exécutable intégré.
Les fichiers natifs C / c ++ libstdc ++. * De votre Ubuntu sont des binaires x86 (ou x86_64) mais les appareils et émulateurs Android sont ARM. Bien sûr, cela ne fonctionnera pas de toute façon, même si vous définissez un soname correct. C'est une voie très naïve qui ne mène nulle part. Android a un support très limité de C ++, ce qui signifie qu'il n'y a pas d'exceptions, la bibliothèque C ++ standard (y compris STL) et RTTI. Si vous avez besoin d'une telle fonctionnalité, utilisez ma distribution NDK personnalisée à partir de
Il est prévu d'autoriser les bibliothèques C / C ++ dans la prochaine version SDK d'Android (Codename Eclair?) À ce jour, ce n'est pas possible via le SDK Java Android. Cependant, vous pouvez saisir l'énorme projet open source, lancer vos propres bibliothèques, puis flasher votre propre appareil ... mais toute personne qui veut utiliser votre bibliothèque devra également flasher votre build personnalisé.
@ Backslash17: En parcourant l'article et le lien suivant avec les instructions d'installation, tout ce que la société a fait, c'est de lancer un exécutable auto-compilé sur l'émulateur, en contournant le framework Android. Une fois que vous avez l'émulateur, vous pouvez utiliser Telnet et avoir un shell Linux. L'exécution d'un programme Linux est bien sûr triviale. Mais cela ne fonctionne pas pour les téléphones sans jailbreak (aka accès root) et non livrable sur le marché.
À moins que Google n'ouvre d'autres opportunités ou que quelqu'un écrive un compilateur personnalisé qui compile Language X en bytecode Dalvik (Dalvik est la machine virtuelle qui exécute les programmes Android), vous ne pourrez pas écrire de code natif.
Réponses:
Pour tous ceux qui y viennent via Google, notez qu'à partir du SDK 1.6, Android dispose désormais d'un SDK natif officiel.
Vous pouvez télécharger le NDK Android (Kit de développement natif) ici: https://developer.android.com/ndk/downloads/index.html
Il existe également un article de blog sur le NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
la source
Le NDK Android est un ensemble d'outils qui vous permet d'implémenter des parties de votre application en code natif, en utilisant des langages tels que C et C ++. Pour certains types d'applications, cela peut vous aider à réutiliser des bibliothèques de code écrites dans ces langages.
Pour plus d'informations sur la mise en route du développement natif, suivez ce lien .
Des exemples d'applications peuvent être trouvés ici .
la source
Normalement, vous devez:
Si vous cherchez à vendre une application:
la source
Google a publié un kit de développement natif (NDK) (selon http://www.youtube.com/watch?v=Z5whfaLH1-E à 00:07:30).
J'espère que les informations seront mises à jour sur la page des groupes Google ( http://groups.google.com/group/android-ndk ), car elle indique qu'elle n'a pas encore été publiée.
Je ne sais pas où obtenir un téléchargement simple, mais j'ai entendu dire que vous pouvez obtenir une copie du NDK à partir du référentiel Git de Google sous la branche beignet.
la source
La position officielle semble être que ce n'est pas quelque chose que vous voudriez "faire". Voir ce fil sur la liste des développeurs Android. Google envisage d'utiliser Android sur une variété d'appareils différents (CPU, écrans, etc.). La meilleure façon d'activer le développement est donc d'utiliser du code managé (portable) qui cible la machine virtuelle Dalvik. Pour cette raison, le SDK Android ne prend pas en charge C / C ++.
MAIS, jetez un œil à cette page :
Le cadre d'application géré semble être superposé à ces bibliothèques. La page continue pour lister les bibliothèques C / C ++: bibliothèque C standard, média, 3D, SQL Lite et autres.
Il vous suffit donc d'une chaîne de compilation qui compilera C / C ++ vers le CPU approprié (ARM, dans le cas du G1). Vous trouverez ici de brèves instructions sur la façon de procéder .
Ce que je ne sais pas, c'est où trouver les descriptions des API que ces bibliothèques fournissent. Je suppose qu'il peut y avoir des fichiers d'en-tête enterrés quelque part dans le SDK, mais la documentation peut être incomplète / manquante. Mais je pense que c'est possible!
J'espère que c'est utile. Pour mémoire, je n'ai pas écrit d'applications Android natives - juste quelques applications gérées simples.
Andy
la source
Vous pouvez utiliser nestedvm pour traduire C (ou d'autres langages GCC) en bytecode Java, et l'utiliser comme base de votre port. Par exemple, consultez le port Android de la collection de puzzles portables Simon Tathams .
Je m'attends à ce que cette méthode soit rendue obsolète par le NDK, mais elle pourrait ne pas l'être si certains réseaux ou quelque chose ne permettent pas aux gens de mettre à niveau leurs téléphones.
la source
Google a déjà lancé Google I / O 2011: Bringing C and C ++ Games to Android session, disponible sur http://www.youtube.com/watch?v=5yorhsSPFG4
ce qui est bon pour comprendre l'utilisation de NDK pour écrire une application en c et c ++ pour android.
Si vous souhaitez simplement compiler n'importe quel jeu natif basé sur une console et les exécuter sur Android, cet article a montré 3 méthodes pour le même.
1: Compilation statique à l'aide d'une chaîne d'outils autonome
2: Compilation croisée à l'aide de la chaîne d'outils Android NDK
3: Compilation croisée à l'aide du code source AOSP
la source
Peut-être cherchez-vous cela?
http://www.mosync.com/
Il s'agit d'une couche intermédiaire pour le développement de plusieurs plates-formes mobiles utilisant c ++.
la source
En regardant cela, il semble possible:
la source
Depuis 2009, il y a un développement sur cette question.
Necessitas - Qt (framework C ++) pour Android Vidéo de
démarrage .
la source
Jetez un œil au groupe Google NDK qui semble prometteur, la première version du NDK sera disponible au 1S2009.
Mise à jour: et il est publié http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
la source
Je ne suis pas sûr que le NDK offre une couverture complète de l'API Java officielle.
Depuis http://developer.android.com/sdk/ndk/index.html#overview :
la source
Google vient de sortir le NDK qui permet exactement cela.
http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-android-15-ndk-release-1.html
Il peut être trouvé ici: http://developer.android.com/sdk/ndk/1.5_r1/index.html
la source
Ce billet de blog peut être un bon début: http://benno.id.au/blog/2007/11/13/android-native-apps Malheureusement, beaucoup de choses importantes sont "laissées comme exercice au lecteur".
la source
Je ne connais pas de tutoriel mais un bon outil de développement: Airplay SDK d'Ideaworks Labs. (Récemment renommé " Marmelade ") En utilisant C / C ++, vous pouvez créer des applications pour Windows Mobile, iPhones, Android. Le seul composant que je n'aimais pas était le compositeur GUI - un buggy, mais vous pouvez toujours le remplacer par le Bloc-notes.
la source
Vous pouvez télécharger c4droid, puis installer le plugin GCC et installer sur votre SD. Du shell, je traverse simplement le répertoire où se trouve le binaire GCC, puis je l'appelle pour créer un exécutable intégré.
trouver / -name gcc
/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc
chat> test.c
./arm-linux-androideabi-gcc test.c -o test
./tester
bonjour le bras!
la source
Ces trois étapes sont bonnes à avoir et à stocker dans ce post.
1) Comment porter le code C natif sur Android
2) http://www.integratingstuff.com/2010/12/12/calling-native-c-code-through-jni-in-android-applications/
3) http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/
la source
Les fichiers natifs C / c ++ libstdc ++. * De votre Ubuntu sont des binaires x86 (ou x86_64) mais les appareils et émulateurs Android sont ARM. Bien sûr, cela ne fonctionnera pas de toute façon, même si vous définissez un soname correct. C'est une voie très naïve qui ne mène nulle part. Android a un support très limité de C ++, ce qui signifie qu'il n'y a pas d'exceptions, la bibliothèque C ++ standard (y compris STL) et RTTI. Si vous avez besoin d'une telle fonctionnalité, utilisez ma distribution NDK personnalisée à partir de
http://crystax.net/android/ndk.php - il prend en charge toutes les fonctionnalités C ++ répertoriées ci-dessus.
Pourquoi y a-t-il une erreur: référence non définie à l'erreur de lien «__cxa_end_cleanup». Android stlport
temps. Parce qu'il n'y a pas de lien vers libstdc + +. A. Tellement mal.
Parce qu'il utilise une bibliothèque statique, il est nécessaire de lier le libstdc + + complet. Une canette
http://crystax.net/android/ndk.php ici pour télécharger le package
répertoire sources \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi.
Android sur son propre support libstdc + + est limité, il doit être lié à un libstdc + + complet. Un travail.
Ajouter un fichier dans Android.mk
LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \
Et
LOCAL_CPPFLAGS + =-lstdc + +-fexceptions
peut être compiléla source
Il est prévu d'autoriser les bibliothèques C / C ++ dans la prochaine version SDK d'Android (Codename Eclair?) À ce jour, ce n'est pas possible via le SDK Java Android. Cependant, vous pouvez saisir l'énorme projet open source, lancer vos propres bibliothèques, puis flasher votre propre appareil ... mais toute personne qui veut utiliser votre bibliothèque devra également flasher votre build personnalisé.
la source
Réponse courte: vous ne pouvez pas.
@ Backslash17: En parcourant l'article et le lien suivant avec les instructions d'installation, tout ce que la société a fait, c'est de lancer un exécutable auto-compilé sur l'émulateur, en contournant le framework Android. Une fois que vous avez l'émulateur, vous pouvez utiliser Telnet et avoir un shell Linux. L'exécution d'un programme Linux est bien sûr triviale. Mais cela ne fonctionne pas pour les téléphones sans jailbreak (aka accès root) et non livrable sur le marché.
À moins que Google n'ouvre d'autres opportunités ou que quelqu'un écrive un compilateur personnalisé qui compile Language X en bytecode Dalvik (Dalvik est la machine virtuelle qui exécute les programmes Android), vous ne pourrez pas écrire de code natif.
la source