您的位置:首页 > 移动开发 > Android开发

android 在module内创建CMakeLists.txt来实现生成多个.so文件

2017-11-10 10:34 513 查看
公司要做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( XXXX
SHARED
src/main/cpp/xxx.cpp
)

#加入android库
find_library( android-lib
android )

find_library( log-lib
log )

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 PROPERTIES
LIBRARY_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-lib
XXXX
${log-lib})


如果提示找不到libXXXX.so的时候可以Build->Make Module 一下,清除下缓存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐