用Androidstudio新建一个项目,在main目录下创建jni目录,创建一个Test.cpp c++文件。
·
extern "C" {
jstring nativeGetHelloString(JNIEnv *env, jobject obj) {
return env->NewStringUTF((char *) " This is calling from JNI suckers!");
}
static JNINativeMethod gMethods[]={
{"nativeGetHelloString", "()Ljava/lang/String;", (void *)nativeGetHelloString},
};
static const char* className="com/android/cgcxy/jnidynamicload/TestJni02";
static int registerNativeMethods (JNIEnv *env){
jclass clazz;
clazz = env->FindClass(className);
if (clazz == NULL) {
// LOGD("failed to load the class %s", className);
return JNI_FALSE;
}
if(env->RegisterNatives(clazz, gMethods, sizeof(gMethods)/sizeof(gMethods[0])) < 0){
return JNI_FALSE;
}
return JNI_TRUE;
}
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* env = NULL;
jint result = -1;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
{
// LOGE("ERROR: GetEnv failed\n");
goto bail;
}
if (registerNativeMethods(env) < 0) {
// LOGE("ERROR: jnitest native registration failed\n");
goto bail;
}
result = JNI_VERSION_1_4;
bail:
return result;
}
}
编写.mk文件生成.so
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := demo
LOCAL_SRC_FILES := Test.cpp
include $(BUILD_SHARED_LIBRARY)