É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?

Robert Gould
la source
seulement si vous jailbreaker le téléphone AFAIK.
Cogsy
64
Le jailbraking n'est-il pas pour les iPhones?
Robert Gould
1
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
Robert Gould
4
DOOM pour Android est écrit en Java code.google.com/p/doom-for-android/source/browse/#svn/trunk
Marco Mustapic

Réponses:

247

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

Andy Johnson
la source
5
OK, alors maintenant que diriez-vous de C # et .Net? -)
Avi
4
Impossible de voir le support .net se produire
vickirk
16
@Avi mono-android.net
Tomas Andrle
2
S'il vous plaît se référer à ce lien androidsnippets.wordpress.com/2012/08/30/...
KK_07k11A0585
2
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 .

MannyNS
la source
1
ou 2009, 2010, 2011, 2012 ou 2013
Christopher Berman
19

Normalement, vous devez:

  1. Installez Google Android NDK. Il contient des bibliothèques, des en-têtes, des exemples de fichiers makf et une chaîne d'outils gcc
  2. Construisez un exécutable à partir de votre code C pour ARM, optimisez-le et liez-le avec les bibliothèques fournies si nécessaire
  3. Connectez-vous à un téléphone à l'aide de l'interface adb fournie et testez votre exécutable

Si vous cherchez à vendre une application:

  1. Construisez une bibliothèque à partir de votre code C
  2. Créez un code Java simple qui utilisera cette bibliothèque
  3. Incorporez cette bibliothèque dans le fichier de package d'application
  4. Testez votre application
  5. Vendez-le ou distribuez-le gratuitement
psihodelia
la source
je suis un nouveau dans NDK et je veux exécuter C lan dans Android. avez un lien ref?
Parag Chauhan
14

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.

Marc
la source
12

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 :

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.

Andy

Andy Johnson
la source
4
Downvoting. Le NDK semble être un compilateur officiel pour le code natif Android maintenant. Rendre cette réponse obsolète.
unixman83
8

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.

rjmunro
la source
1
+1 pour une alternative au NDK, même si le NDK le rend obsolète.
tobsen
Nestedvm n'est-il pas compatible avec plus d'appareils?
charo
8

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

Jeegar Patel
la source
7

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 ++.

joepal
la source
2
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.
Zuzlx
7

En regardant cela, il semble possible:

"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. "

backslash17
la source
6

Depuis 2009, il y a un développement sur cette question.
Necessitas - Qt (framework C ++) pour Android Vidéo de
démarrage .

zkunov
la source
Bon point. Tout comme une note supplémentaire, Necessitas utilise le NDK Android.
Jaime Ivan Cervantes
5

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 :

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.

Android Eve
la source
2

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.

zergius
la source
2

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

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

./arm-linux-androideabi-gcc test.c -o test

./tester

bonjour le bras!

elahtrebor
la source
2

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 \

 $ (LOCAL_PATH) / libs / liblua.a \
 `$ (LOCAL_PATH) / libs / libstdc + +. A`  

Et LOCAL_CPPFLAGS + =-lstdc + +-fexceptionspeut être compilé

ZhangXuelian
la source
1

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é.

haseman
la source
-7

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.

mec
la source
C'est pour ça que j'ai écrit "Il semble ...". Voir à croire!
backslash17