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
    }
  }
  ...
}

你可能感兴趣的:(Android JNI 问题 | missing and no known rule to make it |)