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:
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:
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:
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:
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 !