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); }
这样就不会出现找不到库的问题了
<p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>