JNI之Java調用so文件


一、背景:web項目中需要調用第三的一個so庫文件,只能略微學習下了,對android NDK開發方面應該也有所幫助,學習下

二、調用方式

第一種方式:Java直接調用so文件

第二種方式:Java通過自己的so文件,調用第三方的so文件

 

三、參考示例(就不拷貝來拷貝去了,直接貼上我參考的網址吧)

參考網址:

Java調用so,c編譯成so    http://blog.chinaunix.net/uid-20180960-id-1972669.html

Java文件 -> *.class -> *.h -> 編寫*.c  ->編譯成.so ,執行

 

 

c++與c調用so文件           http://blog.csdn.net/yf210yf/article/details/11712999

  1. void *handle = dlopen("./libadd_c.so", RTLD_LAZY);  
  2.       
  3.     if(!handle)  
  4.     {  
  5.         return -1;  
  6.     }  
  7.       
  8.     typedef int (*add_t)(int a, int b);  
  9.     add_t add = (add_t) dlsym(handle, "add");  
  10.     if(!add)  
  11.     {  
  12.         dlclose(handle);  
  13.         return -1;  
  14.     }  
  15.     a = add(3, 4);  
  16.     dlclose(handle);  
  17.     return 0;  
jni中參數的傳遞、轉換       http://blog.csdn.net/liu_jun_y/article/details/9178501

jint Java_cn_hongdameng_aacencoder_AacEncoder_AacWrite(JNIEnv* env,jobject this,jbyteArray jBuffer, jint jBufferSize)

{
    jbyte* bBuffer = (*env)->GetByteArrayElements(env,jBuffer,0);
    unsigned char * buf=(unsigned char *)bBuffer;
...................
}
 
 
第三種:JNA方式也不錯,可以直接調用第三方so文件,學習中...


免責聲明!

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



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