小白开发之生成so库(方式二)
环境需要
需要在SDK Tools下载:NDK / CMake / LLDB 如不知在哪看,可看此链接:小白开发之生成so库(方式一)
1. 新建空(Empty Activity)工程
2. 新建.txt / .cpp
app
---> src
---> main
---> 新建Directory文件类型(text)
text
---> File类型(CMakeList
.txt)(注:新建时,把后缀也写上
.txt)
---> C
/C
++ Source File类型
(native-lib
.cpp
)
3. CMakeLists.txt
# 设置CMake构造本地库所需要的最低版本
cmake_minimum_required(VERSION
3.4.1)
# 配置库
(.so
/.a
)信息(可定义多个library库,并使用CMake来构建)
add_library(
# 库的名称,相对应生成的
.so
/.a文件名称是libnative
-lib
.so
/.a
native-lib
# STATIC:静态库
(.a
):目标文件的归档文件,在链接其它目标的时候使用
# SHARED:动态库
(.so
):会被动态链接,在运行时被加载
# MODULE:模块库:不会被链接到其它目标中的插件,但是可能会在运行时使用
SHARED
# 资源文件,可以写多个
# 库所在位置的相对路径,相对于本CMakeLists
.txt所在的目录
# 路径可以写详细一点:src
/main
/text
/native-lib
.cpp
# 也可以下面简略的写
native-lib
.cpp
)
# 从系统查找依赖库(这个不是必需的,如果不需要打印的,可以不写)
# NDK提供了一套实用的原生API和库,可以使用find_library搜索NDK中存在的库,
# 只需要加入所需要使用库的名称即可,如下面的日志库log
-lib。
find_library(
# android系统每个类型的库会存放一个特定的位置,而log库存放在log
-lib中
log
-lib
# android系统在c环境下打log到logcat的库
log
)
# 配置库的链接(依赖关系)
# 指定CMake连接到目标库中,
# 可以链接多个库,如上面的
native-lib库以及NDK中自带的log
-lib库
target_link_libraries(
# 目标库(注:要与上面配置库信息里的名称一样)
native-lib
# 依赖于
$
{log
-lib
} )
# 无须注释的
,可复制这行代码
(还没写完,你所复制进去的代码都是黑色的
)
cmake_minimum_required(VERSION
3.4.1)
add_library(
native-lib
SHARED
native-lib
.cpp
)
find_library(
log
-lib
log
)
target_link_libraries(
native-lib
$
{log
-lib
} )
4. build.gradle(添加两处地方)
externalNativeBuild
{
cmake
{
cppFlags
""
}
}
externalNativeBuild
{
cmake
{
path
"src/main/text/CMakeLists.txt"
version
"3.10.2"
}
}
5. 生成so库
这时候生成的so库是没有什么用的,
.cpp里面的内容还没写。
先看一下生成so库操作(
--- Build
---> Make Project
---)
(注:如有报错,看下路径是否写对,名称是否对应
)
---查看打印信息出 SUCCESSFUL 表示成功生成so文件--- ---查看so库文件:app ---> intermediates ---> cmake ---> debug ---> obj (默认生成全部类型的so文件)---