使用Android Studio开发NDK程序时出现couldn't find "lib××××.so的问题

NDK编程是Android开发的一项重要技能,利用JNI编程可以将许多复杂的处理过程用C/C++来进行,从而提高效率!

不了解JNI的同学可以先看看这里
https://blog.csdn.net/cgwang_1580/article/details/79586710

最近,采用Android Studio来进行ndk开发,由于Android Studio 2.2之后采用cmake的方法来编库,所以在各种文件配置上与Eclipse+ndk有很大的不同,当然与2.2之前的版本也有较大的改变。

这是Android Studio 2.2以上版本开发ndk的一个参考:
http://wl9739.github.io/2016/09/21/%E5%9C%A8-Android-Studio-2-2-%E4%B8%AD%E6%84%89%E5%BF%AB%E5%9C%B0%E4%BD%BF%E7%94%A8-C-C-md/

接着,终于来到本篇文章的核心:
在Android Studio ndk开发中,想在项目中添加一个已经编好的库(lib××××.so),有源文件和头文件;其中,库已经添加,目录也包括了,头文件也已经包含,编译可以通过,但是运行程序时总是crash,错误如下:….couldn’t find “lib××××.so的问题,前面还有很长的部分,但是核心就是这句,可以看出来就是找不到要添加的库lib××××.so;

这是我的CMakeList配置:

include_directories(${COMMON_INC_LIB}/xxxx  (头文件位置,没问题)
                )

link_directories( ${COMMON_INC_LIB}/common_lib/${ANDROID_ABI}add_library( # Sets the name of the library.
             native-lib
             # Sets the library as a shared library.
             SHARED
             # Provides a relative path to your source file(s).
             src/main/cpp/main.cpp
             src/main/cpp/lib××××.cpp

target_link_libraries(
                       native-lib
                       log
                       xxxx (要添加的库)
                       )

就是这样的配置,个人觉得好像没有什么问题,但总是crash,终于在万能的CSDN上面找到一些提示,原来我的工程目录下 app/libs/armeabi-v7a中没有把要添加的库放进去,也就是说虽然已经包含了头文件、库目录,但是默认应该是在app/libs中寻找需要的库文件,这是在build.gradle中设定的:

sourceSets{
        main{
            jniLibs.srcDir(['libs'])
        }
    }

就是这个语句进行了这样的设定,当然,如果没有将库放进app/lib目录下也是可以的,但是需要在CMakeList中添加拷贝语句:

#copy libxxxx.so to libs
 add_custom_command(TARGET native-lib
           PRE_BUILD
           COMMAND ${CMAKE_COMMAND} -E copy ${COMMON_INC_LIB}/xxxx/${ANDROID_ABI}/libxxxx.so ${SO_OUTPUT_PATH}/libxxxx.so
           )

终于大功告成!!!

猜你喜欢

转载自blog.csdn.net/cgwang_1580/article/details/79966018