1. 动态库的编译
- 下载tencent_ncnn对应的源码
- 在src/main/下新建jni目录,将下载好的ncnn源码文件导入
- 我这里使用的是cmake编译工具,当然大家可以使用ndk编译工具进行编译
- 安装cmake构建工具,在File-Setting - Android SDK - SDK Tools - 勾选CMake进行安装下载
- 查看local.properties文件中是否有cmake.dir
cmake.dir=C\:\\Users\\TH\\AppData\\Local\\Android\\Sdk\\cmake\\3.10.2.4988404
sdk.dir=C\:\\Users\\TH\\AppData\\Local\\Android\\Sdk
- 在build.gradle中屏蔽dependencies中引用的所有依赖库
- 在android{}中添加cmake版本和文件路径
android{
externalNativeBuild {
cmake {
version "3.10.2"
path file('src/main/jni/CMakeLists.txt')
}
}
}
- 基于tencent_ncnn库进行封装对外提供nativate函数调用
- 编写对应的CMakeLists.txt文件
project(lenovoncnn)
cmake_minimum_required(VERSION 3.10)
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20231027-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)
find_package(ncnn REQUIRED)
add_library(lenovoncnn SHARED mtcnn.cpp mtcnn_jni.cpp)
target_link_libraries(lenovoncnn ncnn)
2. 编译后的动态库调用
- 新建子module 包名为编译库对应的包名。
- 将编译后的动态库导入lib下
- 在build.gradle中进行配置
android {
defaultConfig {
ndk {
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
- 在子module包下创建对应的nativate method 调用System.loadLibrary("")进行加载动态库
- 在app主module下进行模型存放及模型调用