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

原创 2018年04月16日 20:31:55

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
           )

终于大功告成!!!

推荐一个解决这类问题的思路的博客:
https://blog.csdn.net/sinat_22657459/article/details/53420047

版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/cgwang_1580/article/details/79966018

Android Studio 加载 .so库出现couldn't find "*.so"

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com*....
  • DameinMax
  • DameinMax
  • 2015-10-29 18:46:22
  • 6285

android PathClassLoader couldn't find "libxxx.so"

1. 问题: Android studio中,引用so库时,不能正确加载so。 2.错误详情: com.project.testapp I/System.out: -------------an er...
  • liranke
  • liranke
  • 2016-12-14 13:41:34
  • 1743

在AndroidStudio不能找到so文件问题:couldn't find libweibosdkcore.so

Process: com.example.myweibo, PID: 12241 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoad...
  • qq_29819253
  • qq_29819253
  • 2015-08-24 20:57:45
  • 5587

UnsatisfiedLinkError、couldn't find "xxx.so"

错误日志:java.lang.UnsatisfiedLinkError: couldn't find "xxx.so"
  • cheng545
  • cheng545
  • 2017-09-04 19:11:19
  • 883

1.1解决Android studio中 java.lang.UnsatisfiedLinkError couldn't find "libcsiipowerenter.so问题

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.h...
  • sxl01890
  • sxl01890
  • 2016-08-24 14:06:28
  • 669

部分手机不能加载so文件,couldn't find *.so

背景当我们项目中使用到了.so库时,大部分手机能正常运行,但是部分手机在运行时,比如我们项目中使用到了mupdf这个开源的pdf查看器,里面需要使用到libmupdf.so,此时会报couldn’t ...
  • a631855639
  • a631855639
  • 2016-01-29 11:44:26
  • 6433

Android项目开发填坑记-so文件引发的攻坚战

故事的最初我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so库...
  • ys743276112
  • ys743276112
  • 2016-03-16 16:41:06
  • 6464

加载so库错误问题“couldn't find "libbmob.so"”

整个app的配置文件的 android { 中添加: sourceSets { main() { jniLibs.srcDirs = ['libs'] }...
  • gaobaoshen1
  • gaobaoshen1
  • 2016-06-06 09:47:28
  • 2961

android5.1真机调试报找不到so的错误

android5+ 找不到so文件
  • fan1989800
  • fan1989800
  • 2016-10-09 20:02:39
  • 740

java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader couldn't find .so

10-25 19:42:25.340 28880-28880/com.firs.facedetecttosvr W/System: ClassLoader referenced unknown pat...
  • xx326664162
  • xx326664162
  • 2016-10-25 19:53:17
  • 2586
收藏助手
不良信息举报
您举报文章:使用Android Studio开发NDK程序时出现couldn't find "lib××××.so的问题
举报原因:
原因补充:

(最多只允许输入30个字)