公司要做sdk,而且大部分代码都是c++的,这就需要在项目中生成多个.so文件,一个是sdk主体,一个是测试代码,通过网上查了相关资料有不同的方法
没有module的实现方法
有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 一下,清除下缓存