IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Couplage Java/Cpp via NDK


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Couplage Java/Cpp via NDK
    Bonjour,

    Après pas mal d'efforts, j'ai réussi à lancer une fonction en C sur Android.
    Mais ce que je veux c'est du C++ pour utiliser class et templates.

    Ça marchait très bien avec un fichier .c mais avec le .cpp ça bloque et je bloque complètement =/

    Mon projet est TestJNI, l'Activity est TestJNIActivity.
    Tout se passe dans le package com.macgros.testjni

    TestJNIActivity.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package com.macgros.testjni;
     
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.view.Menu;
     
    public class TestJNIActivity extends Activity {
    	// Load the native Library
    	static {
            System.loadLibrary("ndkmain");
            System.loadLibrary("TestJNI");
        }
     
    	// NATIVE FUNCTIONS
        public native String  invokeNativeFun();
     
        // JAVA
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_test_jni);
     
            String ch = invokeNativeFun();
            new AlertDialog.Builder(this).setMessage(ch).show();
        }
     
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_test_jni, menu);
            return true;
        }
    }


    Dans mon dossier jni j'ai deux fichiers : Android.mk et native.cpp

    Android.mk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := ndkmain
    LOCAL_SRC_FILES := native.cpp
    include $(BUILD_SHARED_LIBRARY)
    native.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <string.h>
    #include <jni.h>
     
     jstring Java_com_macgros_testjni_TestJNIActivity_invokeNativeFun(JNIEnv* env, jobject obj)
     {
         return env->NewStringUTF("OK");
     }


    Je compile mon .cpp via Cygwin en utilisant un make.bat situé dans la racine du projet

    make.bat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    echo on
     
    set BASHPATH="C:\cygwin\bin\bash"
    set PROJECTDIR="/cygdrive/c/Dev/wkEclipse/testJNI"
    set NDKDIR="/cygdrive/c/Dev/SDKs/Android-NDK/ndk-build"
     
    %BASHPATH% --login -c "cd %PROJECTDIR% && %NDKDIR%
     
    pause:

    Mon make marche à merveille mais une fois l'appli lancée sur l'émulateur je n'ai pas de boite de dialogue "Ok" (sinon je ne serai pas la ^^') mais "Unfortunately, TestJNI has stopped".

    Il y a une erreur quelque part mais impossible de la trouver. Je vous remercie d'avance pour toute aide que vous pourrez me fournir

    Bonne journée !

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Points : 86
    Points
    86
    Par défaut
    Salut,
    Perso j'ai des fichiers cpp que je ramène en Java.

    La différence que je vois à première vue comme ça, c'est que j'ai ajouté ça après mes include :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    .
    et ça à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef __cplusplus
    }
    #endif
    Si ça peut t'aider

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    C'était en partie ce qu'il fallait rajouter. Manquait aussi une paire de macros, à savoir JNIEXPORT et JNICALL.

    Mais surtout, je ne chargeais pas la bonne library (c'est libtestjni.so et non testjni.so qui est crée) donc pas étonnant qu'il plante



    Merci bien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Couplage Apache Tomcat via ssl
    Par samil dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 28/10/2009, 15h59
  2. JAVA + SFTP via J2SSH TOOLS
    Par DragonLebna dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 02/06/2009, 15h55
  3. couplage Java et C++
    Par madess dans le forum C++
    Réponses: 6
    Dernier message: 05/12/2007, 18h44
  4. Utilisation de la java persistence via netbeans
    Par gaet_045 dans le forum NetBeans
    Réponses: 5
    Dernier message: 17/07/2007, 13h06
  5. Communicatio JAVA <-> C via file de message
    Par fra-rev dans le forum Langage
    Réponses: 4
    Dernier message: 27/02/2007, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo