Android JNI 问题 | missing and no known rule to make it |

问题记录时间:2019/05/06

问题详情

Build command failed.
Error while executing process D:\Android\sdk\cmake\3.10.2.4988404\bin\cmake.exe 
with arguments {--build E:\0.WORK\AdnroidStudio_Project\AndroidNDKMyTest\app
\.externalNativeBuild\cmake\debug\armeabi-v7a --target native}

ninja: error: 'E:/0.WORK/AdnroidStudio_Project/AndroidNDKMyTest
/app/src/main/cpp/src/main/jniLibs/armeabi-v7a/libgeos.so', 
needed by 'E:/0.WORK/AdnroidStudio_Project/AndroidNDKMyTest/app
/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative.so', 
missing and no known rule to make it

解决方案
 出现这种问题的都是因为路径配置出现问题。下面是我的CMakeLists.txt中的so库配置。

##################################################################################
# 设置 JNILIBS_DIR  赋值为jniLibs的路径
# CMAKE_SOURCE_DIR
set(JNILIBS_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})
##################################################################################

##################################################################################
#导入第三方库 【geos】
add_library(geos SHARED IMPORTED)
#设置导入第三方库名称、目标位置[ JNILIBS_DIR ]
set_target_properties(geos PROPERTIES
        IMPORTED_LOCATION ${JNILIBS_DIR}/libgeos.so)
##################################################################################

 这里面需要注意的是CMAKE_SOURCE_DIR ,这个代表了CMakeLists.txt所在的文件路径,而CMakeLists.txtsrc/main/cpp下面(这个坑),然后在文件中却写入了${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI},然后因为文件路径不对,出现了找不到so库的错误信息:

...
ninja: error: 'E:/0.WORK/AdnroidStudio_Project/AndroidNDKMyTest
/app/src/main/cpp/src/main/jniLibs/armeabi-v7a/libgeos.so', 
...

 没事好好看看 error ,其中的路径发现问题...src/main/cpp/src/main/jniLibs/...,眼神很重要,试了几次都出现这个问题,然而没太关注路径这里,愁了有一阵....不过结果还是找出来了,大吉大利,今晚吃个烧鸡补补。

另外,在项目目录下的build.gradle里中加入下面的代码,可以更好的控制so库对应的架构。

android {
  ...
  defaultConfig {
    ...
    ndk{
      abiFilters 'armeabi-v7a'  // x86 armeabi arm64-v8a x86_64
    }
  }
  ...
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容