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

相关文章
相关标签/搜索