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");
}
引用第三方库时需要预编译后才能引用,对于我上面的库的引用,我的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");
}
相关文章推荐
- JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)
- Xcode6 引入第三方静态库工程的方法
- Android应用内调用第三方应用的方法
- android和JS交互,相互调用方法传值。不使用第三方实现原生加载word、ppt、pdf文档
- JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)
- Android 静态方法调用非静态方法
- JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)
- Android调用第三方库的方法
- android中打包带有Activity以及资源文件的jar包在工程中调用的方法
- Android不同工程中的方法是否可以相互调用
- Android开发基础 -- Android Studio导入第三方类库工程的方法
- JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)
- 在android里调用第三方动态链接库.so
- JniHelper调用java静态和非静态方法总结(即cocos2dx中调用android平台下显示第三方广告)
- flashdevelop工程调用android方法
- 工程编入第三方的静态库出现错误的解决方法
- Android JNI反射调用Java构造方法、成员方法和静态方法
- javascript调用后台静态方法与WebService
- 【转载】关于“静态方法不能调用非静态方法”的补充解释
- bcb平台的C++dll的静态调用法和动态调用法的方法