android下JNI中C调用第三方SO有关问题
android下JNI中C调用第三方SO问题
需求描述:
现有一个第三方so文件(比如:libXXX.so),有详细的接口文档,可以在android下直接调用,但现需要用C再封装一层,自己写C调用第三方的libXXX.so,再编译成自已的so文件,android中再调用自己的so文件。
问题:
1.C下如何调用libXXX.so?
2.Android.mk文件如何编写?
请贴详细代码,多谢!
------解决方案--------------------
所有Android.mk的代码都在上面了,C代码跟安卓不安卓的没关系,就是基本C编程而已
------解决方案--------------------
用C调用第三方so
------解决方案--------------------
有这麻烦?有详细的接口文档,可以在android下直接调用
应该有提供lib的头文件吧,直接在android.mk里面将头文件和lib 加入进来
然后在你自己的代码中#include头文件,直接调用相应的接口就可以了。
如果没有头文件就得使用dlopen dlsym
不过.so文件你可以直接copy到/libs/armeabi/下面
然后代码中使用绝对路径dlopen ("/data/data/lib/libxxx.so )
------解决方案--------------------
参照实例:
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=hello-world
LOCAL_SRC_FILES :=hello-world.c
LOCAL_SHARED_LIBRARIES := hello-jni
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)
需求描述:
现有一个第三方so文件(比如:libXXX.so),有详细的接口文档,可以在android下直接调用,但现需要用C再封装一层,自己写C调用第三方的libXXX.so,再编译成自已的so文件,android中再调用自己的so文件。
问题:
1.C下如何调用libXXX.so?
2.Android.mk文件如何编写?
请贴详细代码,多谢!
Android
JNI
so
封装
------解决方案--------------------
所有Android.mk的代码都在上面了,C代码跟安卓不安卓的没关系,就是基本C编程而已
------解决方案--------------------
用C调用第三方so
void *handle;
int (*call_method)(void);
handle = dlopen(so_path, RTLD_LAZY);
//函数指针
call_method = dlsym(handle, "method_name(调用方法的函数名)");
------解决方案--------------------
有这麻烦?有详细的接口文档,可以在android下直接调用
应该有提供lib的头文件吧,直接在android.mk里面将头文件和lib 加入进来
然后在你自己的代码中#include头文件,直接调用相应的接口就可以了。
如果没有头文件就得使用dlopen dlsym
不过.so文件你可以直接copy到/libs/armeabi/下面
然后代码中使用绝对路径dlopen ("/data/data/lib/libxxx.so )
------解决方案--------------------
参照实例:
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=hello-world
LOCAL_SRC_FILES :=hello-world.c
LOCAL_SHARED_LIBRARIES := hello-jni
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)