您的位置:首页 > 移动开发 > Android开发

Android工程调用第三方动态链接库的方法(静态库同理)

2014-05-30 17:13 357 查看
最近在做Android的项目时,需要调用几个动态库libmyCpl.so ,libmyRfidtx.so,libmyRfid.so 和libRFIDDLL.so ,由于初涉Android不知道怎么调用,就去网上查,看到网上许多文章都说在Android.mk中添加LOCAL_SHARED_LIBRARIES := libmyCpl  libmyRfidtx  libmyRfid  libRFIDDLL,但这是个错误,许多人竟然都发这种贴,结果害了我调试了好久,对于这个解决方案估计是相互拷贝,没有试验乱发帖,个人严重鄙视。后来去谷歌上看了几篇文章解决了问题,再此发帖,忘对以后学习Android的新人有所帮助。我的这几个库都放在jni文件夹下,所有用到的头文件和源文件也在此文件夹下。

引用第三方库时需要预编译后才能引用,对于我上面的库的引用,我的Android.mk中的代码如下:

LOCAL_PATH := $(call my-dir)
APP_PLATFORM := android-15
APP_ABI := all

include $(CLEAR_VARS)
LOCAL_MODULE := my-init1  
LOCAL_SRC_FILES := libmyCpl.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS)
LOCAL_MODULE := my-init2  
LOCAL_SRC_FILES := libmyRfidtx.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS)
LOCAL_MODULE := my-init3  
LOCAL_SRC_FILES := libmyRfid.so 
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := my-init4 
LOCAL_SRC_FILES := libRFIDDLL.so 
nclude $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := myUHFDLL
LOCAL_SHARED_LIBRARIES := my-init1 my-init2 my-init3 my-init4
LOCAL_SRC_FILES := com_ndk_myuhfdll_JniUhf.c 
include $(BUILD_SHARED_LIBRARY)

注:上面前面几个预编库的LOCAL_MODULE :自己可以去任意命名字,只要将LOCAL_SHARED_LIBRARIES := 填入和它们相同的名字就行。还有一点要注意的是在应用程序中不知道添加对编译库myUHFDLL的加载,还要加载前面的几个预编译库,否则会报错。正确的加载库的代码如下:

static{
try{
System.loadLibrary("myCpl");
System.loadLibrary("myRfidtx");
System.loadLibrary("myRfid");
System.loadLibrary("RFIDDLL");
System.loadLibrary("myUHFDLL");
Log.i("JNI","trying to load libmyUHFDLL.so");
}
catch(UnsatisfiedLinkError ule){
Log.e("JNI","WARNING:could not load libmyUHFDLL.so");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: