目录
工欲善其事必先利其器
本文设计软件信息如下:
一、工具简介
操作系统 :Windows 7
Eclipse 版本:Luna Service Release 2 (4.4.2)
NDK 版本:android-ndk-r12b-windows-x86_64 (Native Development Kit)
ADT 版本 :Version: 23.0.4.1468518 (Android Development Toolkit)
二、NDK配置
注意,本文是基于Eclipse+ADT环境配置好了之后的教程哈,如果没有配置号ADT,请移步到http://www.91es.com/android.html 中找到“android-studio中文”网站,里面有对应软件下载。
哈哈 插播一则广告:<125啦·读书导航 - 为每个阅读者创造舞台>是我在维护的读书导航网站,欢迎使用。
如果你没有下载NDK,可以看看这篇文章《Android NDK 部分版本下载》
原归正传,我们继续。
0、新建Android 工程
我这创建一个FirstJNI项目(略)
1、NDK的配置系统环境
PS:这一步可以忽略,不过后续我们需要使用,现在有空可以花点时间先配置。
点击计算机右键属性-->高级系统设置-->环境变量,如图
然后在用户变量path和系统变量中增加如下内容:
系统变量:我们新定义一个变量NDK_ROOT,值:D:\android\android-ndk-r12b-windows-x86_64 (这个是你NDK目录路径)
用户变量:我们只需要修改path的值,在其最后新增:%NDK_ROOT% (记住,各个值直接是使用英文输入的";"进行分割的)
PS:红色字体是新增或需要注意的部分。
2、配置Eclipse的NDK环境
点击Eclipse的Window-->Preferences,进入如图界面,然后导入NDK路径:D:\android\android-ndk-r12b-windows-x86_64\build
3、添加NDK支持
选中Android工程“FirstJNI”右键属性-->Android Tools-->Add Native Support-->在lib输入行中输入“FirstJNI”(这个你可以随便定义),点击“Finish”键后,会自动在“FirstJNI”项目中新增如下目录:
jni、obj等,重点是jni目录,其中新增了两个文件:Android.mk和FirstJNI.cpp
如果在Add Android Native Support界面中无法按“Finish”键,并有“NDK location not valid in preferences.”提示时,这说明是上一步(2、配置Eclipse的NDK环境)没有配置好,因此要重新按照上面步骤配置一下即可。
4、创建native 方法
在MainActivity.java中新增如下代码
private native String sayHello(); //定义native方法
static{
System.loadLibrary("FirstJNI");//加载FirstJNI.so库
}
5、编辑FirstJNI.cpp文件
在编辑FirstJNI.cpp前,我们先把后缀“cpp”改为“c”。
为什么呢?我尝试过不改,但发现有些函数解析不了,因此按照网上很多教程方法,就是把“cpp”改为“c”。(这个后续研究一下)
除了要把“FirstJNI.cpp”改为“FirstJNI.c”之外,还需要把Android.mk文件的内容改为如下(红色字体):
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := FirstJNI
LOCAL_SRC_FILES := FirstJNI.c
include $(BUILD_SHARED_LIBRARY)
上面改好了我们就修改“FirstJNI.c”的内容,添加内容(红色字体)如下:
#include <jni.h>
jstring Java_com_la_firstjni_MainActivity_sayHello(JNIEnv* env, jobject thiz) {
return (*env)->NewStringUTF(env, "您好啊,91易搜");
}
恩恩,这是个简单的方法。不过,聪明的你会发现此时Eclipse提示有错误“Method 'NewStringUTF' could not be resolved”、“Unresolved inclusion: <jni.h>”、“Type 'JNIEnv' could not be resolved”。
不急,因为jni等相关的库文件没有导入,我们继续。
6、导入NDK中的库文件
在导入库前,我们先要看看我们创建的项目版本信息。在“FirstJNI”工程中找到“project.properties”文件并打开,有如下内容:
# Project target.
target=android-17
注意看红色字体的内容,此信息告诉我们“FirstJNI”工程的target版本是:android-17
因此我们要在“FirstJNI”工程中导入对应的头文件。
选择“FirstJNI”工程右键属性后显示如图(C/C++ General-->Paths and Synbols-->Add-->File system),最后找到NDK中的include文件,点击确认保存即可。
比如我们的是:D:\android\android-ndk-r12b-windows-x86_64\platforms\android-17\arch-arm\usr\include
顺利导入后上面错误提示就全部消失啦。
7、编译apk运行即可
经过上面步骤,我这里可以正常运行啦。