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,
放置地址:
开源包复制到项目中app/src/main/cpp下面
会加载的模型复制到app/src/main/assets中,其中assets必须以Assets Folder新建文件夹
一、调用opencv-mobile
如果要用完整版的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生成的动态库
-
把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文件里的功能
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)