放置地址:

开源包复制到项目中app/src/main/cpp下面

会加载的模型复制到app/src/main/assets中,其中assets必须以Assets Folder新建文件夹

一、调用opencv-mobile

下载地址为:GitHub - nihui/opencv-mobile: The minimal opencv for Android, iOS, ARM Linux, Windows, Linux, MacOS, WebAssembly

如果要用完整版的opencv,下载地址为:OpenCV - Browse Files at SourceForge.net

可参考OpenCV On Android最佳环境配置指南.md,将OpenCV Java库作为Module导入

CMaleLists.txt配置:

# 添加opencv
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv-mobile-3.4.15-android/sdk/native/jni)
# 该目录下包含OpenCVConfig.cmake文件
find_package(OpenCV REQUIRED core imgproc)  
...
target_link_libraries(mytest ${OpenCV_LIBS}) #因为OpenCV 目录只set知道jni,而它的静态库在jni/staticlibs下

二、调用ncnn

下载地址为:Releases · Tencent/ncnn · GitHub

CMaleLists.txt配置:

# 添加ncnn
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20210525-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)
# 该目录下包含ncnnConfig.cmake文件
find_package(ncnn REQUIRED)
...
target_link_libraries(mytest ncnn) #ncnn的静态库目录就在${ANDROID_ABI}/lib下所以就直接写ncnn就可以了

另外一种配置(针对更轻便的ncnn,:

set_target_properties(ncnn PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/ncnn-android-lib/${ANDROID_ABI}/libncnn.a)  # 即导入静态库
include_directories(${CMAKE_SOURCE_DIR}/ncnn-android-lib/include/ncnn)
...
target_link_libraries(mytest ncnn)

三、调用seetaface

下载地址:SeetaFace6Open/index (github.com)

由于是已经编译过的文件,没有cmake文件,故要添加到动态库

CMaleLists.txt配置:

#添加头文件搜索路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/seetaface6/include)
#添加动态库搜索文件
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/seetaface6/jniLibs/${ANDROID_ABI})
# 或者
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/seetaface6/jniLibs/${CMAKE_ANDROID_ARCH_ABI}")
add_library( seetaface SHARED ${DIR_SRCS})
target_link_libraries(mytest 
        SeetaFaceDetector600
        TenniS
        SeetaAuthorize
        )

注意,添加动态库路径必须在add_library之前,不然找不到

还需在build.gradle添加动态库搜索路径

    sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/cpp/seetaface6/jniLibs']  
        }
    }

四、JNI生成的动态库

  1. 把JNI生成的动态库: \app\build\intermediates\stripped_native_libs对应平台文件夹拷贝到app/libs下

        

 

如果会编译JNI调用了第三方动态库,也会在此文件夹下.

        2. 在app下的build.gradle中增加ndk 跟sourceSets

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']   //寻找库文件地址添加进library
        }
    }

       

 

3. 建立类文件

需要建立与so文件功能对应的类文件,里面含有他的功能,并且文件的名称跟地址都要跟源so一模一样.

点击运行即可生成apk,可使用so文件里的功能

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐