此文章包含Android JNI學習過程當中的遇到的各類錯誤記錄和學習總結。java
1.錯誤:java.lang.UnsatisfiedLinkError: Native method not found: com.example.test.InterfaceJni.init:()Vandroid
已經生生so庫,提示找不到native方法。c++
解決方法:socket
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