AS使用cmake方式运行找不到.so问题

AS使用cmake方式运行找不到.so问题

这真的是很无语的一个SB问题,不知道这个cmake和gradle是如何协同工作的,居然必须在build.gradle文件中指定的目录下且是一级目录下放.so文件,不然的话就 居!然!找!不!到!

  1. 必须在build.gradle中写上,这是我在尝试换其他目录行不行,别直接复制,需要改成自己的目录

    sourceSets.main {
        jniLibs.srcDirs('src/main/jni', 'src/main/jni/armeabi-v7a/lib')
    }
    
  2. 把要用的.so放在指定目录的一级目录下,就是上述的src/main/jni/${ANDROID_ABI}/下,举个例子就是

    • src/main/jni/armeabi-v7a/libnn.so路径下就OK了
    • 放在这里是不行:src/main/jni/armeabi-v7a/lib/libnn.so,即使我在build.gradle中好像指定了这个路径,但是这样真不work!
  3. CMakeLists.txt文件就按照我们指定的路径找到.so文件即可,头文件的查找可以和.so分离开,这个没关系,也就是说头文件的路径和.so文件的路径没关系,在 CMakeLists.txt中指定好就可以了.

    add_library(mtnn SHARED IMPORTED)
    set_target_properties(mtnn PROPERTIES IMPORTED_LOCATION
                          ${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/libmtnn.so)
    include_directories(${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/include/)
    

    可以看到上述中的include_directoriesset_target_properties指定的路径不一样,这个没问题.

下图是目录结构:

只有放在armeabi-v7a的根目录下才可以

你可能感兴趣的:(AS使用cmake方式运行找不到.so问题)