问题记录时间: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.txt
在src/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
}
}
...
}