Android NDK开发学习(六):C调用java中的方法
首先说一下这一次的事例demo时在github上找到的,但是过后忘记了原链接了(实在抱歉),所以会在最后附上我上传的下载链接。
闲言少叙,进入正题。
之前的介绍中就是很常见的java调用C代码,但是实际应用中也存在反向调用。
1、先上运行效果
![](https://box.kancloud.cn/2016-04-26_571f24eb854e5.jpg)
在界面上有三个Button,他们的点击事件如下:
~~~
public class MainActivity extends Activity {
static{
System.loadLibrary("jni");
}
DataProvider dp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dp = new DataProvider();
}
public void onClick(View view) {
int id = view.getId();
switch (id) {
case R.id.call_void_method:
dp.callCcode();
break;
case R.id.call_string_parameter_method:
dp.callCcode1();
break;
case R.id.call_int_parameter_method:
dp.callCcode2();
break;
default:
break;
}
}
}
~~~
DataProvider类:
~~~
public class DataProvider {
public native void callCcode();
public native void callCcode1();
public native void callCcode2();
//C调用java中空方法 shulaing.han.ndk_callback.DataProvider
public void helloFromJava(){
System.out.println("hello from java");
}
//C调用java中的带两个int参数的方法
public int Add(int x,int y){
System.out.println("the add result is : " + (x + y));
return x + y;
}
//C调用java中参数为string的方法
public void printString(String s){
System.out.println("in java code :" + s);
}
}
~~~
C中callCcode方法:
![](https://box.kancloud.cn/2016-04-26_571f24eb9f414.jpg)
执行结果:
![](https://box.kancloud.cn/2016-04-26_571f24ebb66eb.jpg)
类似的带参数的方法也是一样的原理。这里就不重复介绍了。
Demo下载链接 [点击打开链接](http://download.csdn.net/detail/qq_17766199/9136515)
---------------------------------------------------------------------------------------------------------------------
这个NDK的系列就到这里了,因为我在学习中发现了NDK的一个专栏,上面讲的很深入,所以我就不重复的制造
轮子了,附上链接 :[点击打开链接](http://blog.csdn.net/column/details/blogjnindk.html)