Android JNI 幾個常用方法


1. System.load 參數為庫文件的絕對路徑,可以是任意路徑。
System.load("/system/lib/libforlinx_runtime.so");
2. System.loadLibrary ("TestJNI");
這里,TestJNI.dll 必須是在java.library.path這一jvm變量所指向的路徑中。
可以通過如下方法來獲得該變量的值:
System.getProperty("java.library.path");
3. JNI_OnUnload & JNI_OnLoad
JNI_OnUnload()函數與JNI_OnLoad()相對應的。
在載入C組件時會立即呼叫JNI_OnLoad()來進行組件內的初期動作;
而當VM釋放該C組件時,則會呼叫JNI_OnUnload()函數來進行善后清除動作。
//使用例子: http://www.cnblogs.com/langlang/archive/2012/04/17/2454217.html
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
 .........
}
4. RegisterNatives
jint RegisterNatives(jclass clazz, const JNINativeMethod* methods,jint nMethods)
typedef struct {
    const char* name;     /*Java中函數的名字*/        
    const char* signature;  /*描述了函數的參數和返回值*/
    void*       fnPtr;   /*函數指針,指向C函數*/
} JNINativeMethod;

const char* signature: 前面參數,后面返回值
例子:
"()Z" ==> (void *)forlinx_init  ==> jboolean forlinx_init(JNIEnv *env, jclass clazz)
"()I" ==> (void*)init_native    ==> jint init_native(JNIEnv *env, jobject clazz)
字符   Java類型     C類型
V      void         void
Z      jboolean     boolean
I      jint         int
J      jlong        long
D      jdouble       double
F      jfloat            float
B      jbyte            byte
C      jchar           char
S      jshort          short

數組則以"["開始,用兩個字符表示
[I     jintArray       int[]
[F     jfloatArray     float[]
[B     jbyteArray     byte[]
[C    jcharArray      char[]
[S    jshortArray      short[]
[D    jdoubleArray    double[]
[J     jlongArray      long[]
[Z    jbooleanArray    boolean[]

 

轉載請注明出處: http://www.cnblogs.com/langlang/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM