简述如何使用NDK,调用C/C++语言

首先  我们先来了解一下什么是NDK。

我们都知道Android 应用是在dalvik虚拟机中运行的。NDK可以让你使用本地代码语言来开发应用,比如说C/C++,这种方法对某些类型的应用的是有好处的,可以充分利用本地代码和在某些情况下加速代码的执行。
对于绝大多数的应用来说,使用NDK并不是一个明智的选择,作为一个开发者,我们需要衡量它所带来的好处和缺点。使用本地代码并不一定可以使性能得到优化,但是通常使得应用代码变得复杂。一般来说,我们将应用中关键部分的代码用C/C++写,而不能由于我们习惯于用C/C++开发而把所有的代码都用C/C++来实现。
有下面这些特点的应用可以考虑使用NDK:
1 独立的,不和其他应用有关系的
2 频繁占用CPU但是申请的内存空间不是很大的操作,像信号的处理,物体的模拟等等
简单的用C/C++重写我们的代码是不会带来很大的性能提升的。
在考虑是否采用本地代码开发的时候,要结合应用的实际需求并且看看Android 的framework层是否提供了我们需要的API,但是用NDK可以充分利用本地已经有的代码。
Android framework提供下面两种方法来使用本地代码:
1 在Android framework的框架下面开发应用,使用JNI的方法来使用NDK本地方法提供的API。这样的好处就是我们可以很好的利用的Android的framework提供的框架,但是需要编写本地具体实现的代码。这样的APK可以在Android 1.5及其之后的版本上面运行。
2 写一个本地的Activity,在本地代码中实现生命回调函数,AndroidSDk提供了
类,这个类可以方便的让你在你的本地代码中实现回调函数(OnCreate,OnPause),从而当这些事件发生的时候处理。

下面我写一个简单的案例来看一下NDK到底怎么用。。
1.首先我们需要去https://developer.android.com/index.html 下载NDK,
2.创建一个我们自己的项目.写一个自己的类,注:native是java调用非Java语言的一个桥梁,它是由非Java语言实现的,这里我就简单的写了一个静态的方法

3.这时候我们打开命令提示符,找到我们的这个类的路径,这里我们的路径可以右击项目,找到Properaties,然后找到Location  就可以看到这个项目的路径了,找到之后继续找src这个文件夹 ,找到之后输入javah-jni 带你的项目包和类的名字,如下图

这个时候你的项目中会生成一个h文件,也叫做头文件。。
4.这个时候右击你的项目 android tools 中的 Add Native Support   然后确定就行。。
5.还是右击你的项目  ,找到properties, zhaodao C/C++General 中的paths and Symbols,然后找到你NDK路径的platforms文件夹下的android-18下的arch-arm下的include,复制以上路径,添加进去。。
6.在你的jni文件夹中有两个文件一个是mk文件,一个是cpp文件,首先我们把cpp文件的后缀改成c,还有把cpp中添加一些代码如下:#include "com_example_ndkdemo_Hello.h"(这是导入你的头文件名),顺便把你头文件中的JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_Hello_getString
  (JNIEnv *env, jobject obj){
	return (*env)->NewStringUTF(env,"哈哈哈哈");
}也复制过来(红色部分是你需要改的);然后把mk文件中的LOCAL_SRC_FILES := NdkDemo.c(后缀cpp去掉换成c);这是头文件中的代码:JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_Hello_getString
  (JNIEnv *, jclass class);
7.接下来就是在Activity中做了一些简单的逻辑,调用了hello类中的静态方法,代码如下:
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.loadLibrary("NdkDemo");//注意括号里面换成cpp文件名
	}
			//监听方法		
	public void cacll(View v){
		String string=Hello.getString();
		System.out.println(string);
	}
}
8.这里我们就完成了简单的java代码调用非java的代码,运行项目,点击按钮,会打印出字符串。。案例比较简单,我只是举了一个简单的例子,希望大家可以深入的了解一下C/C++语言,方便我们更好的与java结合使用,好,就这些。。。不喜勿喷~~~~




  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值