JNI使用問題記錄

此文章包含Android JNI學習過程當中的遇到的各類錯誤記錄和學習總結。java

1.錯誤:java.lang.UnsatisfiedLinkError: Native method not found: com.example.test.InterfaceJni.init:()Vandroid

  已經生生so庫,提示找不到native方法。c++

 解決方法:socket

  • 看.h或者.cpp文件中,方法名是否正確,Java_包名_類名_方法名(參數表)。
  • .h或者.cpp文件中native方法聲明和定義必須包含在extern "C"{}中。

2.JNI_OnLoad()函數

 在System.loadLibrary時,調用此函數,返回JNI版本,不一樣的版本支持的特性可能不一樣。也能夠作一些初始化的動做。學習

3.android打印。在c++層或者c中的打印(print),不能在logcat中查看。須要調用android/log.h中的log打印:spa

    __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__)  :ANDROID_LOG_DEBUG是打印級別,TAG是打印的標籤,__VA_ARGS__是打內容。it

 能夠這樣使用:編譯

  #include <android/log.h>test

  #define TAG "TEST_CPP"

  #define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__)

  使用:LOGD("In C:\n---------");

  

  另外,連接時可能會提示:error: undefined reference to '__android_log_print',是由於沒有加入共享庫,在mk文件中加入:

    LOCAL_LDLIBS    := -llog

4.修改Android ping.c代碼,增長socket通訊,增長頭文件:#include <cutils/sockets.h>,編譯出錯:undefined reference 。

  解決方法:修改Android.mk,增長:LOCAL_SHARED_LIBRARIES+= libcutils

相關文章
相關標籤/搜索