android 软件调用c库,Android调用第三方C++算法库

本文详细介绍了如何在Android App和系统中调用C/C++算法库。对于App,需要编写JNI代码,创建Android.mk和Application.mk,并通过ndk-build生成so库。而在Android系统中,需要在HAL层预编译算法库,并在调用模块的Android.mk中添加依赖。调用时,引入头文件并调用相应函数。
摘要由CSDN通过智能技术生成

背景

现在越来越多应用包含一些第三方C/C++算法库, 比如图像处理, 人脸检测, 语音识别等等. 第三方提供的算法库都是C/C++动态库(.so), 不同的提供商提供的接口存在差异, 主要分为以下两种:

提供Java接口和so库

这种类型调用很简单, 把so库放到打包到apk或者Android系统中, 通过Java接口调用即可, JNI部分代码提供商都写好了.

只提供C/C++接口和so库

此类型调用稍微麻烦些, 需要自己写编译规则和JNI代码

由于一般算法库既可能集成在App中, 也有可能集成在Android系统中, 所以大部分算法提供商都是只提供C/C++接口, 这样就更省事, 只是在App集成稍微麻烦些,下面就讲一下这两种方式如何集成和调用.

App中调用C/C++算法库

由于提供的算法库中并没有JNI部分代码, 所以我们需要自己写JNI代码, 并在native方法中调用算法提供的接口, 最终会产生两个so库, 一个包含我们的native代码, 另一个就是算法库, 集成步骤如下:

1.编写JNI代码

这部分可参看资料很多, 本文不做介绍,直接略过,可参考我之前写的文章:Android JNI 函数注册的两种方式(静态注册/动态注册)

2.编写Android.mk和Application.mk

so库是通过NDK编译产生的, 我们需要编写编译规则,其中主要注意的有两点, 1. 算法商提供的so是以预置的方式(prebuild)进行编译的. 2.我们写的native代码也是编译成so文件, 并且要依赖于算法so库.

假设算法提供的so库名字为libalgo.so, 提供的头文件为algo.h, 可供调用的方法为 const char* getVersion(), 我们写的代码在test.cpp中 , jni目录结构如下:

jni

│─Android.mk

│─Application.mk

│─test.cpp

├─include

│── algo.h

├─lib

│── libalgo.so

Android.mk代码如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := algo

LOCAL_SRC_FILES := lib/libalgo.so

LOCAL_EXPORT_C_INCLUDES :&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值