android|android中调用共享库.so的几种方法

【android|android中调用共享库.so的几种方法】底层调用共享库中函数的方法
> 首先使用dlopen("libmedia.so", RTLD_LAZY); 加载对应的库文件libmedia.so;
> 之后使用dlsym(libhandle, "function_name"); 获取指定函数的指针;
> 最后使用获取的函数指针调用对应的函数,执行相应的操作;
需要注意的是,调用的共享库都必须在对应的Android.mk的共享库中添加;
android调用第三方共享库.so
1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static intxxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;
2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;

> 首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。

> 还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。

> 看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的,是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;

> 使用第三方动态库,应该至少有2个文件,一个是动态库(.so),另一个是包含动态库API声明的头文件(.h)

    推荐阅读