Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Androïd / C++] Programmer en C++ pour Androïd ?

    8 mars 2014 à 14:28:52

    Bonjour à toutes et à tous,

    Après maintes recherches sur Internet mais en vain, je viens poster ici pour savoir comment programmer en C++ pour Androïd ?

    Y a-t-il un IDE efficace pour parvenir à cela ? ( j'ai entendu parler de NDK mais apparemment ce ne sont que des bouts de code et non des applications entières que l'on peut programmer)

    Cordialement,

    Eyrollz.

    • Partager sur Facebook
    • Partager sur Twitter
      9 mars 2014 à 10:50:21

      -Y a-t-il un IDE efficace pour parvenir à cela ?
      Du moment que l'IDE te permet de configurer le compilateur et les commande a utiliser, n'importe lequel fera l'affaire.

       
      -j'ai entendu parler de NDK mais apparemment ce ne sont que des bouts de code et non des applications entières que l'on peut programmer
      Télécharge le NDK, tout est y très bien documenté avec des exemples commentés. Si tu veux faire une application "100% native" tu peux jeter un coup d’œil sur l'exemple "native-activity".

       
      Les inconvénients du NDK : 
      -Tu n'a pas accès au fonction du SDK. (A vrai dire c'est faux, tu peux. Mais à ce moment la autant faire du java)
      -La seul manière d'afficher quelque chose à l'écran est d'utiliser Opengl ES.
      -Une application "native" n'a pas forcement de meilleurs performances qu'une même application codée en java.
      -S'habituer à consulter des sites en anglais comme http://stackoverflow.com , afin de résoudre ses problèmes. 
      Avantages :
      -Très pratique si tu souhaite porter un jeu utilisant Opengl vers la plateforme Android.
      -Il me semble que SDL 2.0 est compatible Android. Un portage non officiel de SFML existe également.

       
      Je ne serais te conseiller, car cela dépend de tes intentions. Si c'est juste pour concevoir un jeu à partir de zéro,
      mieux vaux utiliser Java avec des moteurs tels que libGDX, Andengine qui sont très complets. 
      Si c'est dans le but de porter un jeu déjà fait et basé sur du Opengl, ou tout simplement d'approfondir tes compétences, le ndk peut être une bonne solution.

      -
      Edité par smartties 9 mars 2014 à 10:52:26

      • Partager sur Facebook
      • Partager sur Twitter
        9 mars 2014 à 10:58:16

        Salut !

        Merci beaucoup de ton aide cependant, comme tu as pu le deviner vers la fin, la création de jeux vidéo n'est peut-être pas mon but et en effet, tu as raison de le penser car ce que je veux programmer c'est une application comme celles que tu peux programmer avec Qt ( avec des boutons, champs de saisie, barre de scroll ...), des applications qui te permettent d'écrire et de lire dans un fichier ...

        Par contre j'ai aussi une petite question, quand tu parle de "100% natif", que veux dire natif ? Parcequ'il y a quelques temps en ouvrant une invite de commande de visual studio, il me proposait 3 type de console dont la "native" donc si tu pourrais m'expliquer ce que c'est, ce serait vraiment gentil de ta part.

        Cordialement,

        Eyrollz.

        • Partager sur Facebook
        • Partager sur Twitter
          9 mars 2014 à 11:40:51

          En général on associe le terme "natif" au C/C++ (pour des applications Android).
          Le principe du NDK est de compiler du code C++ sous le format d'une librairie *.so puis d'appeler
          cette librairie sous ton code java, et enfin appeler les fonctions que tu a fait en c++ depuis le code Java.
          Comme ceci : (ici on va nommer le package com.smart.ties

          Partie Java

          public class Activity extends ApplicationContext
          { protected void onCreate(Bundle savedInstanceState) { //on importe la librairie System.loadLibrary("malibrairie"); } }
          public class GLView extends GLSurfaceView implements Renderer
          {
              //cette fonction est appelé 60 fois par seconde
              void onDrawFrame(GL10 gl) { 
              // On appel le code C++ depuis le code java
              nativeAffichage();
              }
              
              private static native void nativeAffichage();
          }

          Partie C/C++

          extern "C"
          {
              JNIEXPORT void JNICALL  Java_com_smart_ties_nativeAffichage( JNIEnv*  env);
          }
          
          void afficher_carrer(int x, int y, int w, int h)
          {
           ...
          }
          
          JNIEXPORT void JNICALL  Java_com_smart_ties_nativeAffichage( JNIEnv*  env)
          {
             // ici on affiche tout ce que l'on veux
             afficher_carrer(0, 0, 10, 10);
             
             afficher_carrer(50 , 0 10, 10);
          }
          



          Hors l'exemple native-activity intégre le module android_native_app_glue, qui est un projet squelette avec
          toutes les fonctions Java déjà préparées. Ce qui te permet de faire application "100% native" seulement en
          c++ puisque la partie Java est déjà faites. Si j'utilise des guillemets c'est parce que ton application contient
          en réalité quelques lignes de java.

          • Partager sur Facebook
          • Partager sur Twitter
            9 mars 2014 à 11:49:47

            D'accord mais tu ne sais pas si il existerais un autre module ( différent de NDK ) pour programmer en C++ sous androïd ?
            • Partager sur Facebook
            • Partager sur Twitter
              9 mars 2014 à 12:03:54

              Merci quand même pour ton aide !
              • Partager sur Facebook
              • Partager sur Twitter
                9 mars 2014 à 12:45:57

                Si tu sais faire un jeu avec la SDL en c++ sous Windows, il n'y a pas de raison que tu n'y arrive pas sous android.

                télécharge le ndk va dans .../Android-ndk/samples/native-activity et regarde le jni/main.c qui prend seulement 300 lignes.

                Ce n'est pas si dure, la preuve mes deux jeux Tower Bruiser et Pixel conquest sont codés en c++

                • Partager sur Facebook
                • Partager sur Twitter
                  9 mars 2014 à 12:58:11

                  Compment ça " main.c qui prend seulement 300 lignes" en gros je dois programmer le main.cpp où c'est déjà fait ?

                  Sinon tu viens de dire un truc qui m'intéresse vachement: on peut utiliser la SDL pour androïd ? ( ext-ce le cas de la SFML ?)

                  Cordialement,

                  Eyrollz.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 mars 2014 à 13:29:39

                    Oui c'est possible, le native-activty est un exemple d'application qui affiche des choses à l'écrans. et utilise

                    l'accelerometre. Le main est déjà prêt avec tous les appel Java fait (le principe du native-activty).


                    smartties a écrit:

                    -Il me semble que SDL 2.0 est compatible Android. Un portage non officiel de SFML existe également.

                    -
                    Edité par smartties 9 mars 2014 à 15:05:30

                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 mars 2014 à 16:47:51

                      D'accord et merci pour ta réponse, cependant je veux savoir, le mot "code natif" veut dire "code compris directement par le processeur"  ?

                      smartties a écrit:

                       Le main est déjà prêt avec tous les appel Java fait (le principe du native-activty).

                      Je n'ai pas compris ce que tu veux dire par les appels Java ?

                      Cordialement,

                      Eyrollz.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 octobre 2016 à 13:48:39

                        bonjour en fait Si il en existe, par contre ils sont un peu ésotérique .. il y a:

                        • QT (un classique)
                        • ewol/river c'est un nouveaux framework que j'ai fait, il est aussi compatible avec IOs ... c'est toujours utile (http://atria-soft.github.io/ewol)
                        • SFML

                        voila, même si c'est un peut tard, ça pourra toujours servir aux suivant ...

                        Si par contre tu cherche comment faire des binding Android vers c++ regarde ici : http://atria-soft.github.io/gale

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 janvier 2019 à 15:45:38

                          Bonjour à tous,

                          désolé de relancer le topic après aussi longtemps, mais est ce que c'est possible de lancer une fonction en c++ dans un script java android en lui passant des paramètres et en récupérant le résultat de cette fonction?

                          Merci

                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 février 2020 à 18:26:37

                            Oui c'est possible à travers la couche JNI (https://fr.wikipedia.org/wiki/Java_Native_Interface).

                            C'est d'ailleurs l'exemple fourni par smartties le 9 mars 2014 à 11:40:51.

                            Chargement du code C++ du coté Java

                            protected void onCreate(Bundle savedInstanceState) {

                                    System.loadLibrary("malibrairie");

                            }

                            Vision de la méthode du coté Java.ici sans paramètre, mais il est aussi possible de placer des paramètre.

                            private static native void nativeAffichage();

                            Le code coté C/C++ avec la couche JNI pour le dialogue Java <=> C/C++

                            extern "C" {

                                JNIEXPORT void JNICALL  Java_com_smart_ties_nativeAffichage( JNIEnv*  env);

                            }

                            void afficher_carrer(int x, int y, int w, int h) {

                             ...

                            }

                            JNIEXPORT void JNICALL  Java_com_smart_ties_nativeAffichage( JNIEnv*  env) {

                               afficher_carrer(0, 0, 10, 10);

                               afficher_carrer(50 , 0 10, 10);

                            }

                            • Partager sur Facebook
                            • Partager sur Twitter

                            [Androïd / C++] Programmer en C++ pour Androïd ?

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown