2010-12-27 2 views
1

J'ai une fonction C, je retourne simplement un entier, comme suit:JNI sur Android, comment passer int de c à java

JNIEXPORT jint JNICALL Java_org_project_ScreenPosition(JNIEnv* env, jobject thiz){ 
    int i=1; 
    return i; 
} 

J'appelle cette fonction de la manière d'une activité onCreateContextMenu Android, comme suit:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ 
menu.setHeaderTitle("TryMenu"); 

int a=ScreenPosition(); 
return; 
} 

Mais tout accident

+1

Pouvez-vous poster ici le code de la classe déclarant la méthode native? –

+0

La trace de la pile d'erreurs peut également être utile. –

Répondre

1

en supposant que vous compilez votre code C dans une bibliothèque appelée libmyCode.so vous devez charger explicitement le code de la bibliothèque partagée dans le processus en utilisant cet appel Java:

System.loadLibrary ("myCode");

avant d'appeler des méthodes JNI.

Si vous avez modifié votre API (les déclarations de méthode en Java avec le mot clé "native"), vous devez impérativement exécuter à nouveau l'utilitaire javah.

Si vous utilisez Eclipse, après avoir exécuté javah et ndk-build, il est recommandé d'actualiser la vue Eclipse du système de fichiers en appuyant sur F5. Eclipse détectera alors le code de bibliothèque nouvellement construit.

Si elle ne fonctionne toujours pas, s'il vous plaît partager la sortie de logcat, y compris toute la sortie qui apparaît à partir du moment où vous installez l'application sur le téléphone, la décharge de la pile et toute erreur ou les messages d'avertissement

Questions connexes