Android NDK之Hello NDK

eclipse安装最新的 ADT 23.06,据说带最新的NDK插件,如图,就是装好NDK插件了。

下载最新的NDK android-ndk-r10e,地址:http://developer.android.com/ndk/downloads/index.html,下载完毕是一个.exe执行程序,双击会解压缩到当前文档。打开eclipse上面的界面,选择NDK的路径。

新建一个Android工程,在工程上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字,例如:my-ndk,前后已经有“lib”和".so",所以我们就不要在画蛇添足。此时项目中多了一个jni文件夹,里面有cpp和Android.mk两个文件。

打开cpp文件,发现里面有一行代码#include <jni.h>,但是第一行代码就报错“Unresolved inclusion: <jni.h>”。解决方法就是右键项目-》文件夹,选择高级:Link to alternate location,浏览,选择你java  jdk中include文件夹。发现错误消失。

然后开始写c/c++代码,如果是c++代码,所有代码要用

extern "C" {

"您的方法在这里"

}

包裹起来,不然会报错: 

java.lang.UnsatisfiedLinkError: Native method not found

下面开始写代码

JNIEXPORT jstring JNICALL Java_com_example_androidndk_MainActivity_stringFromJNI(
JNIEnv* env, jobject thiz) {
return env->NewStringUTF("Hello NDK");
}

方法名命名规则:Java_ + 调用该方法的包名(包名的点用_代替) + _ + 调用该接口的类名 + _ + 方法名

写代码的时候可以用alt+/提示,如果不提示,可以检查

中的 最后一项 Codan Analysis UI for c/C++有没有勾选上。

到此,c/c++代码写完,下面开始写java代码,下面的代码放在类中。

public native String stringFromJNI();//跟cpp中的方法名一致。
static {
System.loadLibrary("XXX");//XXX代表Android.mk文件中的LOCAL_MODULE后面的字符。
}

至此,就可以部署Android程序到模拟器中了。

PS:libs文件夹下默认有一个文件夹armeabi,代表处理器类型,armeabi文件夹下有libXXX.so,是生成的so文件。

在jni文件夹中新建一个Application.mk文件,里面写上 APP_ABI:=all,然后重新编译,会发现libs下多了很多文件夹分别对应不同的CPU指令集。其中armeabi是默认设置,兼容x86.




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值