android ndk 怎样调用第三方的so库文件
2个回答
展开全部
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共享库;
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共享库;
2015-07-07 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数: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即可
首先是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即可
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询