三步打造动态so包
参考文档
Android 官网
ndk环境配置
local.properties 文件
ndk.dir =/xxx/xxx/android-ndk-r14b
1.Android.mk
## 1.当前路径
LOCAL_PATH := $(call my-dir)
## 修改当前路径在xxx目录下
LOCAL_PATH :=$(LOCAL_PATH)/xxx/
## 2.依赖第三方so
include $(CLEAR_VARS)
## 定义模块名字
LOCAL_MODULE := libxxx
## 加载不同架构的so(如:"armeabi-v7a" ,"arm64-v8a")
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libxxx.so
##根据您使用的是共享库 (.so) 还是静态库 (.a),添加 PREBUILT_SHARED_LIBRARY 或 PREBUILT_STATIC_LIBRARY。
include $(PREBUILT_SHARED_LIBRARY)
## 3.需要打包的模块配置
include $(CLEAR_VARS)
## 原生库名称
LOCAL_MODULE := mylib
#遍历路径include下所有 .cpp、 .c、 .h 文件
LOCAL_C_INCLUDES :=$(LOCAL_PATH)/include/
MY_CPP_PATH := $(LOCAL_PATH)/
My_All_Files := $(shell find $(MY_CPP_PATH)/.)
My_All_Files := $(My_All_Files:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_CPP_LIST := $(filter %.cpp %.c %.h ,$(My_All_Files))
MY_CPP_LIST := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
# 加载源文件
LOCAL_SRC_FILES := $(MY_CPP_LIST)
#依赖的so模块
LOCAL_SHARED_LIBRARIES := libxxx
# 编译动态库
include $(BUILD_SHARED_LIBRARY)
2.Application.mk
APP_STL:=c++_shared
#要为项目中的所有 C++ 编译传递的标记
APP_CPPFLAGS := -frtti -fexceptions
# 不同框架指令集
APP_ABI := armeabi,armeabi-v7a,arm64-v8a
#声明构建此应用所面向的 Android API 级别,并对应于应用的 minSdkVersion
APP_PLATFORM := android-21
## 原生库名称
APP_MODULES := mylib
3.build.gradle 封装ndk-build 命令行,在gradle的Task 里面找到ndkBuild 并且执行
task ndkBuild(type: Exec) {
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkDir = properties.getProperty('ndk.dir')
commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath
}
成功后会自动生成libs包和obj包,里面有不同框架的so包.