web-dev-qa-db-fra.com

Écrire des applications en C ou C ++ pour Android?

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 en C là-bas, tout le monde le sait. un bon tutoriel sur le sujet?

Merci!

281
Robert Gould

Si vous y accédez via Google, notez que, à partir du SDK 1.6, Android dispose désormais d'un SDK natif officiel.

Vous pouvez télécharger le Android NDK (Kit de développement natif) à partir d'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

242
Andy Johnson

Android NDK est un jeu d'outils qui vous permet d'implémenter des parties de votre application en code natif, à l'aide de 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 langues.

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 .

40
MannyNS

Normalement, vous devez:

  1. Installez Google Android NDK. Il contient les bibliothèques, les en-têtes, les exemples makfile et la chaîne d'outils gcc
  2. Construisez un exécutable à partir de votre code C pour ARM, optimisez-le et associez-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 souhaitez vendre une application:

  1. Construire une bibliothèque à partir de votre code C
  2. Créez un simple code Java qui utilisera cette bibliothèque
  3. Incorporer cette bibliothèque dans le fichier de package d'application
  4. Testez votre application
  5. Vendez-le ou distribuez-le gratuitement
18
psihodelia

Google a publié un kit de développement natif (NDK) (selon http://www.youtube.com/watch?v=Z5whfaLH1-E à 00:07:30).

Espérons que les informations seront mises à jour sur la page des groupes de Google ( http://groups.google.com/group/Android-ndk ), car il est indiqué qu’elle n’a pas encore été publiée.

Je ne sais pas trop 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, situé sous la branche Donut.

14
Marc

La position officielle semble être que ce n'est pas quelque chose que vous "voudriez faire". Voir ce fil dans la liste des développeurs Android. Google envisage Android de s'exécuter sur différents appareils (processeurs, écrans, etc.). Le meilleur moyen de permettre le développement consiste donc à utiliser un code géré (portable) qui cible la machine virtuelle Dalvik. Pour cette raison, le SDK Android ne prend pas en charge le C/C++.

MAIS, jetez un oeil à cette page :

Android inclut un ensemble de bibliothèques C/C++ utilisées par divers composants du système Android. Ces fonctionnalités sont exposées aux développeurs via le cadre d’application Android.

L'infrastructure d'application gérée semble se superposer à ces bibliothèques. La page continue en énumérant les bibliothèques C/C++: bibliothèque C standard, média, 3D, SQL lite, etc.

Donc, tout ce dont vous avez besoin est d’une chaîne de compilation qui compilera C/C++ sur le processeur approprié (ARM, dans le cas du G1). Quelques brèves instructions sur la façon de procéder sont ici .

Ce que je ne sais pas, c'est où trouver les descriptions des API fournies par ces bibliothèques. J'imagine qu'il y a peut-être des fichiers d'en-tête enterrés dans le SDK quelque part, mais la documentation peut être incomplète/manquante. Mais je pense que cela peut être fait!

J'espère que c'est utile. Pour mémoire, je n'ai pas écrit d'applications Android natives - juste quelques applications simples gérées.

Andy

12
Andy Johnson

Google a déjà lancé Google I/O 2011: Apporter des jeux C et C++ à Android . Cette session est disponible sur http: // www. youtube.com/watch?v=5yorhsSPFG4

il est bon de comprendre l’utilisation de NDK pour écrire des applications en c et c ++ pour Android.

Si vous voulez simplement compiler n'importe quel jeu natif basé sur une console et les exécuter sur Android, alors cet article a montré 3 méthodes pour la même chose.

1: compilation statique à l'aide d'une chaîne d'outils autonome

2: Compilation croisée avec Android Chaîne d’outils de NDK

3: Compilation croisée à l'aide du code source AOSP

8
Jeegar Patel

Vous pouvez utiliser nestedvm pour traduire le langage C (ou d’autres langages GCC) en bytecode Java, et l’utiliser comme base de votre port. Par exemple, voir le portage Android de la collection de casse-tête portables de Simon Tathams .

Je suppose que cette méthode est rendue obsolète par le NDK, mais elle pourrait ne pas l'être si certains réseaux ou quelque chose ne permet pas aux gens de mettre à niveau leurs téléphones.

8
rjmunro

En regardant cela, il semble que c'est possible:

"le fait est que seul le langage Java est 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, pirates informatiques et experts en développement d'applications pour mobiles. Les gars de Elements Interactive BV, la société derrière la bibliothèque Edgelib, a réussi à exécuter des applications C++ natives sur la plate-forme Android, même s'il reste 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. "

7
backslash17

Peut-être cherchez-vous cela?

http://www.mosync.com/

C'est une couche intermédiaire à développer pour plusieurs plates-formes mobiles utilisant c ++.

7
joepal

Depuis 2009, il y a un développement sur ce sujet.
Necessitas - Qt (framework C++) pour Android
Pour commencer video .

6
zkunov

Je ne suis pas sûr que le NDK fournisse une couverture complète de l'API officielle Java.

De http://developer.Android.com/sdk/ndk/index.html#overview :

Veuillez noter que le NDK ne vous permet pas de développer des applications exclusivement natives. Le moteur principal d'Android reste la machine virtuelle Dalvik.

5
Android Eve

Jetez un coup d'œil à groupe Google ndk cela semble prometteur, la première version du NDK sera disponible dans le premier semestre de 2009.

Mise à jour: Et il est publié http://Android-developers.blogspot.com/2009/06/introducing-Android-15-ndk-release-1.html

5
Gordon Freeman
3
Alexander Stolz

Vous pouvez télécharger c4droid puis installer le plugin GCC et l'installer sur votre SD. Depuis le shell, je traverse le répertoire où se trouve le binaire GCC, puis l’appelle pour créer un exécutable intégré.

find/-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

salut bras!

3
elahtrebor

Cet article de blog peut être un bon début: http://benno.id.au/blog/2007/11/13/Android-native-apps Malheureusement, beaucoup d'éléments importants sont "laissés en tant que un exercice au lecteur ".

2
Krzysiek Goj

Les fichiers C/c ++ natifs libstdc ++. * De votre Ubuntu sont des binaires x86 (ou x86_64), mais Android et des émulateurs sont au format ARM. Bien sûr, cela ne fonctionnera pas de toute façon, même si vous définissez son nom correct. C'est un moyen très naïf qui ne mène nulle part. Android ne prend en charge que très peu le langage C++, ce qui signifie qu'il n'y a pas d'exception, la bibliothèque C++ standard (y compris STL) et RTTI. Si vous avez besoin de telles fonctionnalités, utilisez ma distribution NDK personnalisée de

http://crystax.net/Android/ndk.php - Il prend en charge toutes les fonctionnalités C++ énumérées ci-dessus.

Pourquoi y a-t-il 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 + +. R. Si mal.

Comme il utilise une bibliothèque statique, il est nécessaire de lier l'intégrale libstdc + +. Une canette

http://crystax.net/Android/ndk.php ici pour télécharger le package

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 + +-fexceptions peut être compilé

2
ZhangXuelian
2
YumYumYum

Je ne connais pas de tutoriel, mais un bon outil de développement: le SDK Airplay d’Ideaworks Labs. (Récemment renommé " Marmelade ") En C/C++, vous pouvez créer des applications pour Windows Mobile, iPhone, Android. Le seul composant que je n’ai pas aimé est l’interface graphique composer, qui est un buggy, mais vous pouvez toujours le remplacer par le Bloc-notes.

2
zergius

Il est prévu d'autoriser les bibliothèques C/C++ dans la prochaine version de SDK de Android (nom de code Eclair?). À ce jour, il n'est pas possible d'utiliser le Android Java. SDK. Cependant, vous pouvez récupérer le projet Open Source ÉNORME, lancer vos propres bibliothèques, puis flasher votre propre appareil ... mais toute personne souhaitant utiliser votre bibliothèque devra également flasher votre version personnalisée.

1
haseman