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 :

Faire une librairie qui appelle la sdk


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Faire une librairie qui appelle la sdk
    Bonjour,

    ça va faire 2 jours que je m'arrache les cheveux, maintenant que je suis chauve, je fais appelle à vous

    Alors voilà, je sais appeler du java à partir du C++ et vice et versa dans une application android (j'utilise QT creator).

    Mais j'aurais besoin de le faire dans une shared library (.so) et là, rien ne va plus.
    Si je me contente d'appeler mes fonctions de la librairie en c++, tout va bien. Mais dès que mes fonctions (celles de la librairie, toujours) essaient d'appeler des fonctions java de la sdk (parce qu'elles n'existent pas dans la ndk), plus rien ne marche.

    En fait, dans une librairie, il n'y a pas fichier manifest (puisque pas d'application), ou alors comment faut-il le configurer ? Comment le c++ peut-il alors connaitre mes classes java ?

    Est-ce qu'il n'y aurait pas aussi un problème de thread et d'environnement ? Pour récupérer JNIEnv ?

    Est-ce que quelqu'un a déjà essayer de faire un truc aussi tordu ?
    Est-ce que je trouverai plus d'aide dans le sous forum Qt ?

    Merci beaucoup !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bon j'avance....je n'ai pas trouvé comment appeler mes classes java (que je voudrais contenues dans ma library), mais je peux appeler les classes de la sdk, à partir de mon .so en lui passant la machine virtuelle à partir de l'application appelante.

    Par exemple, dans mon application appelante, je fais :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #include "MainWindow.h"
    #include "ui_MainWindow.h"
     
    #include "EssaiPatchif.h"
    #include "MyLibrary.h"
    #include <jni.h>
     
    static MyLibrary* myLib=0;
    static JavaVM* s_javaVM = 0;
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
     
        if(!myLib)
        {
           if(!s_javaVM)
            {
                qDebug() << "VM n'est pas initialisé";
                return;
            }
     
            myLib=new myLibrary(s_javaVM);
    ...
        }}
    ...
    ...
    jint JNICALL JNI_OnLoad(JavaVM *vm, void *)
    {
     
        JNIEnv *env;
        if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_4) != JNI_OK)
        {       
            return JNI_FALSE;
        }
        s_javaVM = vm;
       ... 
        return JNI_VERSION_1_4;
    }

    et puis dans ma libraririe est faite comme ça
    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
    #include <QtAndroidExtras/QAndroidJniEnvironment>
     
    static JavaVM* s_javaVM = 0;
     
    myLibrary::myLibrary(JavaVM *vm)
    {
     
        s_javaVM=vm;
     
         JNIEnv* env;
             if (s_javaVM->AttachCurrentThread(&env, NULL)<0)
             {
                 qCritical()<<"AttachCurrentThread failed";
                 return;
             }
             jclass clazz=env->FindClass("com/example/MaClasseJava");
             if (!clazz)
             {
                 qCritical()<<"Can't find java class";
                 return ;
             }
    ...
    }

    je trouve les classes quand il s'agit des classes de la sdk, mais j'aimerais bien trouver mes propres classes java. Mais j'ai l'impression que ce n'est pas trop possible, si ?

Discussions similaires

  1. [Requête] Faire une sommation qui fonctionne?
    Par Norin dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 10/08/2006, 16h32
  2. Comment faire une PS qui renvoi l'annee en cours
    Par hugobob dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/07/2006, 14h08
  3. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  4. Faire une fenêtre qui reste au premier plan
    Par Mandelbrot dans le forum Windows
    Réponses: 6
    Dernier message: 13/03/2006, 19h34
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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