JNI Java层类关联C/C++层的类

Android开发时,由于要实现某某功能,须要集成算法公司的算法库(so库),这就须要本身编写JNI。java

一般这些库提供的接口能够概况成一、初始化    二、算法处理    三、释放    四、打印版本号算法

初始化后会返回一个指针(句柄),算法处理和释放时都会用到这个指针,因此在初始化后,须要将这个指针返回到Java层保存起来。指针

public static native long init();

public static native boolean deal(long handle);

public static native boolean release(long handle);

 

JNIEXPORT jlong JNICALL Java_com_test_Test_init
  (JNIEnv *, jobject)
{
    void* handle = xxxInit();
    return (jlong)handle;
}

JNIEXPORT jboolean JNICALL Java_com_test_Test_deal
  (JNIEnv *, jobject, jlong jhandle)
{
    void* handle = (void*)jhandle;
    xxxDeal(handle);
    return true;
}

JNIEXPORT jboolean JNICALL Java_com_test_Test_release
  (JNIEnv *, jobject, jlong jhandle)
{
    void* handle = (void*)jhandle;
    xxxRelease(handle);
    return true;
}

可是若是算法返回的是智能指针,且里面保存的是一个类的指针,则须要改为:code

JNIEXPORT jlong JNICALL Java_com_test_Test_init
  (JNIEnv *, jobject)
{
    auto handle = xxxInit();
    return (jlong)handle.release();
}

JNIEXPORT jboolean JNICALL Java_com_test_Test_deal
  (JNIEnv *, jobject, jlong jhandle)
{
    xxx* handle = (xxx*)jhandle;
    handle->Deal();
    return true;
}

JNIEXPORT jboolean JNICALL Java_com_test_Test_release
  (JNIEnv *, jobject, jlong jhandle)
{
    void* handle = (void*)jhandle;
    delete handle;
    return true;
}
相关文章
相关标签/搜索