首先还是按部就班地新建一个android示例工程“UseSharedLibDemo”,版本android-api9
<a href="http://blog.51cto.com/attachment/201301/131203114.jpg" target="_blank"></a>
仍然不厌其烦地运行一次,以确定我们的Demo工作正常。
双击打开项目树,在“/libs”目录下新建文件夹“armeabi”(大小写敏感),并将我们之前准备好的库“libDemoModule.so”拷贝到该目录下以备使用。
<a href="http://blog.51cto.com/attachment/201301/133852766.jpg" target="_blank"></a>
对于该库的使用,我们并不需要知道“max”这个函数是怎么实现的,只需要知道它的JNI接口就可以了,对于库“libDemoModule.so”中的“max”函数,现有接口如下:
JNIEXPORT jint JNICALL
Java_com_nativetools_NativeDemo_max(JNIEnv *env, jobject jthis, jint a, jint b);
根据上述接口的描述,为了在本项目中使用这个接口,我们需要新建包“com.nativetools”,并在本包下新建类“NativeDemo”,如下:
<a href="http://blog.51cto.com/attachment/201301/133332608.jpg" target="_blank"></a>
接着在类“NativeDemo”中加载库“libDemoModule.so”,并对本地方法“max”进行声明如下:
package com.nativetools;
public class NativeDemo {
static {
//加载需要使用的库
System.loadLibrary("DemoModule");
}
//对库中的本地方法进行声明
public native int max(int a, int b);
}
这里需要注意“System.loadLibrary("DemoModule")”中的“DemoModule”由我们的库名去掉前缀“lib”和后缀“.so”而来,并且大小写敏感,否则会出现诸如找不到函数的实现、加载库初始化失败之类的错误,比如我们把大写“D”改成小写“d”,报错如下,也为大家遇到错误后进行修正提供一个参考:
<a href="http://blog.51cto.com/attachment/201301/140514475.jpg" target="_blank"></a>
然后,然后事情就结束了,我们剩下要做的仅仅是在需要使用max函数的地方导入我们的工具包并调用max进行相关计算:
...
//导入本地方法所在工具包
import com.nativetools.NativeDemo;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NativeDemo nativetool = new NativeDemo();
//调用本地函数max
Integer i = nativetool.max(1024, 512);
new AlertDialog.Builder(this).setMessage(i.toString()).show();
<a href="http://blog.51cto.com/attachment/201301/135046457.jpg" target="_blank"></a>
可以看到库中的“max”函数已经成功调用,需要注意的是,android端声明native code的代码需要严格按照JNI接口来组织,及本例中,JNI接口为
<a href="http://blog.51cto.com/attachment/201301/135601554.jpg" target="_blank"></a>
这也是我们为什么要在项目中加入“com.nativetools.NativeDemo”这个类的原因。
Summary
bill自己也是刚接触类似第三方库的使用,打心底里觉得本文还差很多东西,但自己也没法说清楚,于是仅仅将自己当前如何使用.so的方法进行了简要的说明,希望在以后的学习和工作中,能够深入而具体的习得这方面的知识和技巧。
<a href="http://down.51cto.com/data/2362215" target="_blank">附件:http://down.51cto.com/data/2362215</a>
本文转自Bill_Hoo 51CTO博客,原文链接:http://blog.51cto.com/billhoo/1125559,如需转载请自行联系原作者