android 加载第三方库
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cal
LOCAL_SRC_FILES := ./libcal.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../sum/jni/
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := call
LOCAL_SRC_FILES:= \
call.cpp
(warning (LOCAL_SRC_FILES))
LOCAL_LDLIBS := -llog -lz -lm
$(warning aaa)
LOCAL_SHARED_LIBRARIES := cal #这里记得加上
APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
采用这种方法只能是在存在android代码情况下才能用,也就是System.loadLibrary(“cal”); System.loadLibrary(“call”);这个时候才能用,如果libcall.so变成了一个可执行程序”call”,那么不能这样只写,运行时会出现找不到第三方库, 原因是第三方库的路径并不在系统搜索路径下面,Android.mk中到现在我也不知道怎么指定一个搜索路径, 在LOCAL_LDLIBS后面加上-L./也不管用。
改进方法直接采用动态加载第三方库,这样写mk的时候不需要写任何和第三方有关的东西(需要头文件的话,另算),然后在dlopen的时候写一个绝对路径:
if((handle = dlopen("/data/libcal.so", RTLD_NOW)) == NULL) { LOGE("dlopen - %sn", dlerror()); exit(-1);}
这样就不会出现找不到库的问题了
更多相关文章
- Android代码实现关机重启
- Android路径大全
- 15、android 常用文件路径备忘
- android studio 56 下载网络歌曲 代码
- Android为Notification加上一个进度条
- Android(安卓)面试之横竖屏切换的Activity生命周期
- Android(安卓)O(android 8.1) SYSTEM_UID应用无法使用FileProvider
- Android拍照、录像、录音代码范例
- android从网络获取图片以及异步加载图片