Android 如何调用第三方.so (.a) 文件
2017-04-01 17:40
495 查看
http://blog.csdn.net/u014088294/article/details/51441394
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
在ndk开发中,我们有时候会使用到别人编译好的第三方本地库,这些本地类库有时候是符合JNI接口的,同时可能会提供一些Java接口文件,这样我们就可以直接将.so文件和Java文件直接导入。但是有时候,可能一些本地类库并不符合JNI接口,而且,其并没有提供Java层,这个时候,我们就需要自己编译本地类库啦。本文,我们将对这两种情况进行说明。
比如,我们在编写本地类库twolib-second的时候,需要用到twolib-first.a类库(注意,该类库是静态库),我们可以这样使用,jni文件结构,
其中,first.h是twolib-first.a的头文件。此时需要注意,如果一个类库没有提供头文件,那么我们是无法使用该类库的。
mk文件
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
首先,我们prebuilt一下libtwolib-first模块,然后编译我们自己的模块,并制定依赖的库LOCAL_STATIC_LIBRARIES := libtwolib-first。编译成功后,在我们的Java文件,我们只需要loadLibrary(“twolib-second”)就可以了。但是如果我们使用到的类库是共享库(后缀名是.so),那么我们也得将该库load。也就是这样,
2
1
2
Demo下载地址,Github
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
在ndk开发中,我们有时候会使用到别人编译好的第三方本地库,这些本地类库有时候是符合JNI接口的,同时可能会提供一些Java接口文件,这样我们就可以直接将.so文件和Java文件直接导入。但是有时候,可能一些本地类库并不符合JNI接口,而且,其并没有提供Java层,这个时候,我们就需要自己编译本地类库啦。本文,我们将对这两种情况进行说明。
1. 本地类库符合JNI接口
大多数本地类库都是符合这种情况的,什么叫符合JNI接口呢,就是类库的入口函数名称是按照JNI接口命名的,这种情况下,我们是可以直接从Java层调用该本地类库的。这种类库使用比较简单,一般来说,这种类库都会提供一些Java文件,我们可以通过这些Java文件来调用本地类库。2. 本地类库不符合JNI接口
有时候,我们在编写本地代码的时候,可能会使用到一些本地类库,来集成一些功能,通常这些类库是不符合JNI接口的,因为它是提供给本地代码使用的,那么我们应该如何使用这些代码呢?比如,我们在编写本地类库twolib-second的时候,需要用到twolib-first.a类库(注意,该类库是静态库),我们可以这样使用,jni文件结构,
其中,first.h是twolib-first.a的头文件。此时需要注意,如果一个类库没有提供头文件,那么我们是无法使用该类库的。
mk文件
include $(CLEAR_VARS) LOCAL_MODULE := libtwolib-first LOCAL_SRC_FILES := libfirst/libtwolib-first.a LOCAL_EXPORT_C_INCLUDES := libfirst/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libtwolib-second LOCAL_SRC_FILES := second.c LOCAL_STATIC_LIBRARIES := libtwolib-first include $(BUILD_SHARED_LIBRARY)1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
首先,我们prebuilt一下libtwolib-first模块,然后编译我们自己的模块,并制定依赖的库LOCAL_STATIC_LIBRARIES := libtwolib-first。编译成功后,在我们的Java文件,我们只需要loadLibrary(“twolib-second”)就可以了。但是如果我们使用到的类库是共享库(后缀名是.so),那么我们也得将该库load。也就是这样,
System.loadLibrary("twolib-second"); System.loadLibrary("twolib-fisrt");1
2
1
2
Demo下载地址,Github
相关文章推荐
- Android 如何调用第三方.so (.a) 文件
- Android 如何调用第三方.so (.a) 文件
- 如何在Android NDK中调用第三方库文件(.so)
- 如何在Android NDK中调用第三方库文件(.so)
- 如何在Android NDK中调用第三方库文件(.so)
- Android 如何调用第三方静态库 文件
- 如何在Android NDK中调用第三方库文件(.so)
- 如何调用已有的SO文件来生成供Android使用的SO文件
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- Android Eclipse JNI 调用 .so文件加载问题
- 如何简单修改Android的so文件
- Android库so文件及skia函数的调用
- 如何用gdb找到Android so文件中的加密key
- Android调用so文件(C代码库)方法详解
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- [置顶] android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
- Android开发——如何在第三方应用中调用系统未开放的主题和样式
- Android代码混淆,如何过滤掉反射的R文件及第三方包?
- 文件修改如何简单修改Android的so文件
- Android/Linux下如何引用.so文件