本文主要是介绍android 在module内创建CMakeLists.txt来实现生成多个.so文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
公司要做sdk,而且大部分代码都是c++的,这就需要在项目中生成多个.so文件,一个是sdk主体,一个是测试代码,通过网上查了相关资料有不同的方法
没有module的实现方法
AndroidStudio项目CMakeLists解析
有module的实现方法
Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库
我只参考了有module的方法
首先在自己的项目下创建module,我的module名叫sdklib,再引入项目,再在sdklib\src\main下创建cpp文件夹,创建个xxx.cpp,名字什么的随便取,把项目的CMakeLists.txt复制到sdklib下,修改文件
add_library( XXXXSHAREDsrc/main/cpp/xxx.cpp)#加入android库
find_library( android-libandroid )find_library( log-liblog )set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
set(CMAKE_VERBOSE_MAKEFILE on)
set(distribution_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../app)
set_target_properties(XXXX PROPERTIESLIBRARY_OUTPUT_DIRECTORY${distribution_DIR}/libs/${ANDROID_ABI})target_link_libraries(XXXX${log-lib}${android-lib})
修改sdklib的build.gradle文件,在android{}内添加
externalNativeBuild {cmake {path "CMakeLists.txt"}
}
至于cpu架构也要添加,根据情况添加,在defaultConfig{}内添加
externalNativeBuild {cmake {abiFilters 'arm64-v8a','armeabi', "armeabi-v7a","x86","x86_64"}
}
上面文章有说的,我就不多说了,有些东西我没用上,我是把.so文件保存到项目的app/libs文件夹,根据需求改
然后改项目的CMakeLists.txt
如果有.h文件需要添加
include_directories(${CMAKE_SOURCE_DIR}/../sdklib/src/main/cpp)
指向module内.h所在的文件夹,如果用第三方sdk也有需要引入的.h文件就在加一行指向第三方的.h文件
include_directories(${CMAKE_SOURCE_DIR}/libs/include)
include_directories(${CMAKE_SOURCE_DIR}/../sdklib/src/main/cpp)
然后引入生成的.so文件
set(distribution_DIR ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI})
add_library(XXXX SHARED IMPORTED)
set_target_properties(HMSDK PROPERTIES IMPORTED_LOCATION${distribution_DIR}/libXXXX.so)
target_link_libraries( native-libXXXX${log-lib})
如果提示找不到libXXXX.so的时候可以Build->Make Module 一下,清除下缓存
这篇关于android 在module内创建CMakeLists.txt来实现生成多个.so文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!