目录
前言
在android studio 2.2及以上,构建原生库的默认工具是 CMake。
CMake的脚本名默认是CMakeLists.txt
摘录:Android.mk与Cmake配置_jni cmake和andorid.mk_傅晨明的博客-CSDN博客
一、CMake
cmake 命令详解摘录:CMakeLists.txt说明_cmakelist.txt 文件格式include_directories_紫气东来_life的博客-CSDN博客
#指定cmake最小支持的版本
cmake_minimum_required(VERSION 3.4.1)
# 打印日志
message("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>>>")
message("当前CMake的路径是:${CMAKE_SOURCE_DIR}")
file(GLOB allCpp *.cpp)
#生成一个库
#sample:表示生成的静态库的名称
#STATIC:表示生成的是静态库 SHARED 表示生成的是静态库
#test.cpp:表示将指定目录下的cpp文件打包成相应的库文件,我这里这么写表示CMakeList与cpp文件在同一路径下
add_library(
native-lib
SHARED
${allCpp})
find_library(
log-lib
log)
# 引入FFmpeg的头文件 指定头文件的查找目录
include_directories(${CMAKE_SOURCE_DIR}/include)
#[[# 导入静态库
add_library(get STATIC IMPORTED)
# 开始真正的导入
set_target_properties(get PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libget.a)]]
# 引入FFmpeg的库文件,设置内部的方式引入,指定库的目录是 -L 指定具体的库-l
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/${CMAKE_ANDROID_ARCH_ABI}")
#:将用到的库添加到这里
target_link_libraries(
native-lib
# 具体的库文件,链接到总库
# 这样写会报错,有坑
# avcodec avfilter avformat avutil swresample swscale
# 先把有依赖的库,先依赖进来
avformat avcodec avfilter avutil swresample swscale
${log-lib})
二、Android.mk
# 这里面能够决定编译 Login.c
# 1.源文件在的位置。宏函数 my-dir 返回当前目录(包含 Android.mk 文件本身的目录)的路径。
# LOCAL_PATH 其实就是Android.mk文件本身的目录的路径
LOCAL_PATH := $(call my-dir)
$(info "LOCAL_PATH:======== ${LOCAL_PATH}")
# 2.清理
include $(CLEAR_VARS)
# TODO 预编译库的引入 == 提前编译好的库
LOCAL_MODULE := get
# LOCAL_SRC_FILES := libget.so
LOCAL_SRC_FILES := libget.a
# 预编译共享库的Makeifle脚本
# include $(PREBUILT_SHARED_LIBRARY)
include $(PREBUILT_STATIC_LIBRARY)
#引入其他makefile文件。CLEAR_VARS 变量指向特殊 GNU Makefile,可为您清除许多 LOCAL_XXX 变量
#不会清理 LOCAL_PATH 变量
include $(CLEAR_VARS)
# TODO end
# 3.指定库名字
#存储您要构建的模块的名称 每个模块名称必须唯一,且不含任何空格
#如果模块名称的开头已是 lib,则构建系统不会附加额外的前缀 lib;而是按原样采用模块名称,并添加 .so 扩展名。
LOCAL_MODULE := MyLoginJar
#包含要构建到模块中的 C 和/或 C++ 源文件列表 以空格分开
LOCAL_SRC_FILES := Login.c \
Test.c
# TODO 开始链接进来
# 静态库的链接
LOCAL_STATIC_LIBRARIES := get
# 动态库链接
#LOCAL_SHARED_LIBRARIES := get
# 导入 log
#LOCAL_LDLIBS := -llog
LOCAL_LDLIBS := -lm -llog
# 4.动态库
#构建动态库BUILD_SHARED_LIBRARY 最后要动态库
include $(BUILD_SHARED_LIBRARY)