- Permission denied解决方案:先切换到/cygwin/工作目录/obj/local/armeabi/ 下,然后
Chmod –c 777 ./ ,再切换到jni目录下build.不行换:chmod -Rv 777 ./ - 如果库没有放进对应android项目的libs里,而使用了(“xx”);会报connot find library return null;
- 回调函数的参数如果是byte[],那么在jni层传递的应该是jbyteArray,而不是jcharArray,否则偶尔报错:~Channel is unrecoverably broken and will be disposed!
- 加载库的时候一定要注意加载顺序,可能会引发初始化AvcComm失败,或者Shutton Down JavaVM
- jType类如何new出来后并没有回调回去,就是没有使用它就将它释放了会报空指针。
eg:Fatal signal 11 (SIGSEGV) at 0x00000074 (code=1) - 要用到某个动态库的某个方法,必须要加载()这个库,如果这个动态库和Java层有 native方法的关联,那么加载这个库的时候必须实现Java层的native方法(注意包名类名),如果没有加载这个动态库,会报异常(UnsatisfiedLinkError: Cannot load library),还有,这个动态库必需加载(loadLibrary)。 而静态库不需要加载,可以让动态库与本地方法关联,然后动态库调用静态库里的方法,这样Java层加载库时并不需要这个静态库,只需要加载那个动态库,调用那个动态库里的native方法。
- LOCAL_LDLIBS += -L(LOCAL_PATH)/../lib_so) -lNDK_03
注解:找到当前mkfile文件的上层目录下的lib_so文件夹下的NDK_03库,将这个库包含进去 - jni中包名带有“.”,例如:/data/data//”是正确的,而不是/data/data/com/duicky/
- LOCAL_SRC_FILES中写源文件名称的时候,如果最后面的’\’后面有空格(看不见),编译报错:recipe commences before first target. 停止
如果找不到string,那么可以在里添加
LOCAL_LDLIBS := -lC
LOCAL_C_INCLUDES += $(NDK_PATH)/sources/cxx-stl/stlport/stlportNDK编译时找不到map头文件:新建,在里面加入NDK_STL_INC 的设置。
APP_BUILD_SCRIPT := $(call my-dir)/
APP_MODULES := shortcut_key_server
NDK_PATH := /cygdrive/d/android-ndk-r8d/ndk-build
NDK_STL_INC := $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include
APP_OPTIM := release
APP_CFLAGS += -O3
APP_STL := stlport_static
APP_PLATFORM := android-9
13.编译时报错:找不到NDK里面公共基础库的方法。比如:
/stl/_string.c:600:error:undefined reference to ‘std::__stl_throw_length_error(char const*)’
需要修改中的NDK_STL_INC和APP_STL。有两种:
①:NDK_STL_INC := $(NDK_PATH)/sources/cxx-stl/stlport/stlport
APP_STL := stlport_static
②:NDK_STL_INC := $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/4.6/include
APP_STL := gnustl_shared
14.编译时链接静态库后,运行报错,报静态库的错误,那就LOCAL_STATIC_LIBS,将静态库包含编译进去,不链接。
15. 临界区:XAutoLock l(m_secCmdBuffer);的起始为“{”,结束为”}”