android studio JNI 调用开源包

放置地址:

开源包复制到项目中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文件里的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值