如何在JNI工程中使用第三方库文件
2016-07-15 11:01
267 查看
我们在开发android APP时经常需要调用第三方库文件,有的是以动态库的形式提供(.so),有的则是以静态库的形式提供(.a),这两种形式各有优势:
动态库是动态加载,只有用到的时候才会载入到内存;而静态库有较好的移植性,不依赖于其他系统库,所以适用于不同平台。
一般在android开发中一般是在一次编译中首先产生动态库或静态库,然后后续的编译中引用这些库,这种方式一般是把库放到固定的目录下,每次都会重新产生,外部复制进去的库文件会被清除,不能被使用。
那能否将第三方库随便放入到工程的某个目录下,编译时引用该库呢?答案是肯定的。
那如何书写Android.mk文件呢?
加入我们要引入第三方提供的动态库文件libtest.so,如何将该文件编译进去呢?
使用LOCAL_SHARED_LIBRARIES是将系统中的动态库加入的,例如:libz.so, libutils.so等;
引用第三方提供的库文件,假设libtest.so存放的目录是$(LOCAL_PATH)/abcd/libtest.so,那我们可以采用如下的方式加入:
LOCAL_LDLIBS += -L$(LOCAL_PATH)/abcd -ltest
如果是静态库呢?
假如我们要把$(LOCAL_PATH)/abcd/libtest.a引入到工程中,可以采用如下的方式:
LOCAL_LDFLAGS += $(LOCAL_PATH)/libtest.a
动态库是动态加载,只有用到的时候才会载入到内存;而静态库有较好的移植性,不依赖于其他系统库,所以适用于不同平台。
一般在android开发中一般是在一次编译中首先产生动态库或静态库,然后后续的编译中引用这些库,这种方式一般是把库放到固定的目录下,每次都会重新产生,外部复制进去的库文件会被清除,不能被使用。
那能否将第三方库随便放入到工程的某个目录下,编译时引用该库呢?答案是肯定的。
那如何书写Android.mk文件呢?
加入我们要引入第三方提供的动态库文件libtest.so,如何将该文件编译进去呢?
使用LOCAL_SHARED_LIBRARIES是将系统中的动态库加入的,例如:libz.so, libutils.so等;
引用第三方提供的库文件,假设libtest.so存放的目录是$(LOCAL_PATH)/abcd/libtest.so,那我们可以采用如下的方式加入:
LOCAL_LDLIBS += -L$(LOCAL_PATH)/abcd -ltest
如果是静态库呢?
假如我们要把$(LOCAL_PATH)/abcd/libtest.a引入到工程中,可以采用如下的方式:
LOCAL_LDFLAGS += $(LOCAL_PATH)/libtest.a
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题