android ndk 怎样调用第三方的so库文件

 我来答
小傻

推荐于2016-08-23 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部
android ndk调用第三方的so库文件的步骤如下:
1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;
2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;
huanglenzhi
2015-07-07 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517174
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
用cygwin在win7下编译
首先是jni目录的结构
Android.mk文件内容
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
test.c
LOCAL_SHARED_LIBRARIES := point xml iconv
LOCAL_LDLIBS := -llog
LOCAL_MODULE:=test
include $(BUILD_EXECUTABLE)
include $(LOCAL_PATH)/prebuilt/Android.mk

prebuild目录
include目录就是用到的.h文件
xml目录是依赖的libxml.so库文件
Android.mk内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := point
LOCAL_SRC_FILES := libpoint.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(LOCAL_PATH)/xml/Android.mk

xml目录
到这里基本就能看出规律了,
这里的Android.mk内容和上层的基本相同,如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := xml
LOCAL_SRC_FILES := libxml.so
include $(PREBUILT_SHARED_LIBRARY)
include $(LOCAL_PATH)/iconv/Android.mk
#libxml.so libiconv.so

iconv目录:

Android.mk内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := iconv
LOCAL_SRC_FILES := libiconv.so
include $(PREBUILT_SHARED_LIBRARY)
#libxml.so libiconv.so

有上边可以看到,依赖无非就是一层层的加上去。

在编译的过程,可能遇到如下的错误

可以看到是权限错误(permission dendied),只要找到相关目录,chmod即可
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式