此文章包含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