一、NDK-R7之前的版本的环境配置。
一些下载,可按需要选择:
NDK r7:developer.android/sdk/ndk/index.html
Cygwin:win/ (1.7.11-1)
notepad++:/download/v5.9.8.html
1、cygwin安装
① 运行下载的,点Next
② 选择安装方式。选择在线安装,如果有现成离线包时,可选择离线安装
③ 选择安装目录(Cygwin最终的安装目录)
④ 设置本地包暂存路径(下载文件存放目录)
⑤ 设置网络连接方式:默认直接连接
⑥ 选择下载站点。这个速度比较快mirrors.163
⑦ 选择安装项。在默认设置下,只需选择Devel(点击列表中Devel,将后面的Default改为Install),其它均为默认状态。
注:binutils、gcc、gcc-mingw、gdb、make等必装。
⑧ 漫长等待,直到下载完成
注:下载完后的包可以备份下,以便以后可以直接离线安装,速度快哦!
⑨ 为系统添加环境变量(系统属性->环境变量->Path),如我的为C:/cygwin/bin。
2、cygwin环境验证
① 运行Cygwin一次(Cygwin.bat),以便创建一些用户环境文件
② 检测
cygwin的版本:cygcheck -c cygwin
gcc的版本:gcc -v
g++的版本:g++ -v
make的版本:make -v
我这里g++没有装好,不过暂时不影响使用。
3、配置NDK路径
① 将下载的NDK解压缩到某个目录
② 在 cygwin的 home\<你的用户名>\.bash_profile 文件中最后添加:(可用notepad++或者UltraEdit打开)
NDK=/cygdrive/<你的盘符>/<android ndk 目录> export NDK,
如我的为 NDK=/cygdrive/E/Android/android-ndk-r7b export NDK
注:"NDK"这个名字随便起,以后经常用别太长
② 验证
重启cygwin,输入:cd $NDK
可进入ndk对应目录说明设置OK。
生成项目中native方法,编译成so文件。
在eclipse中新建一个android项目,例如testNdk,最低适应版本选1.5以上,以为NDK支持的最低版本就是1.5,我这里选的2.1。
在项目中新建Jni类,示例代码如下:
public class Jni {
public native int showRusult(int a,int b);
}
TestNdkActivity类示例代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
android最新版setContentView(R.layout.main);
Jni jni = new Jni();
int aa = jni.showRusult(4, 87);
Log.v("test", "aa: " + aa);
setTitle(jni.showRusult(5,8)+"");
}
将项目编译一下,让系统生成类的class文件,一会要用到。
4、生成.件
打开Cygwin,进入项目的bin目录下,
如果之前已经编译过了,那系统应该已经在项目bin目录中生成了classes文件夹,进入这个文件夹。
输入命令 javah -classpath . -jni 本地类名(包括包名),我的如下
然后可以看到在classes文件夹中已经生成了.件。
5、编写C/C++代码
先来看一下生成的king_testNdk_Jni.h
Java_king_testNdk_Jni_showRusult就是我们要在C/C++中实现的方法。新建一个文件,命名与.件保持一致,扩展名为.c。
在这里可以看出,C/C++文件中类的命名方式为Java_包名_类名_方法名
6、生成.so文件
进入NDK安装目录下的sources文件夹,新建一个文件夹testNdk,在其中创建jni文件夹,将生成的.件和.c文件copy到里面,然后在里面新建一个文件Android.mk,文件内容如下
在Cygwin中进入刚生成的jni文件夹
输入命令 $NDK/ndk-build,出现如下结果,说明编译成功。
现在可以看到,在sources/testNdk文件夹下,生成了libs、obj两个文件夹,将libs文件夹整个复制到android项目中即可。
二、使用NDK-R7版NDK搭建Android开发环境
当然,首先需要搭建好android环境,包括SDK、ADT、eclipse等,具体方法我就不讲了,网上有很多。
然后下载好NDK(必须是R7或者以上版本,我现在的最新版是R7b),直接解压即可。
从R7开始,Windows版本的NDK提供了一个d脚本,可以直接利用这个脚本编译。想要做到这一点,只要为Eclipse Android工程添加一个Builder,就能实现Eclipse的自动编译NDK。
1、 启动Eclipse,新建Android工程(此处名为TestNDK)
2、在项目中新建Jni类,示例代码如下:
public class Jni {
public native int showRusult(int a,int b);
}
TestNdkActivity类示例代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Jni jni = new Jni();
int aa = jni.showRusult(4, 87);
Log.v("test", "aa: " + aa);
setTitle(jni.showRusult(5,8)+"");
}
将项目编译一下,让系统生成类的class文件,一会要用到。
3、生成.件
启动cmd,进入项目的bin/classes目录下,输入javah 包名+类名。(我这里是stNdk.Jni)
4、编写C/C++代码
先来看一下生成的king_testNdk_Jni.h
Java_king_testNdk_Jni_showRusult就是我们要在C/C++中实现的方法。新建一个文件,命名与.件保持一致,扩展名为.c。
在这里可以看出,C/C++文件中类的命名方式为Java_包名_类名_方法名
5、生成.so文件
5.1、新建一个文件Android.mk,文件内容如下
这是用来向系统说明你的需求的文件,里面内容的关键字含义请自行查看docs\OVERVIEW.TXT 文件。
5.2、在TestNDK工程的根目录下新建文件夹jni,将 Android.mk和king_testNdk_Jni.c 这两个文件,将其拷贝到TestNDK->jni文件夹下面。
5.3、新建并配置一个Builder
5.3.1、点击Project->Properties->Builders->New,新建立一个Builder。在弹出的对话框上面点击Program,OK!
5.3.2、在弹出的对话框【Edit Configuration】中,配置选项卡【Main】:
Location中需要填入d的路径(NDK安装目录下)。
Working Diretcoty中需要填入TestNDK的工程根目录。
5.3.3、在弹出的对话框【Edit Configuration】中,配置选项卡【Refresh】:
勾选“Refresh resources upon completion”,
勾选“The entire workspace”,
勾选“Recuresively include sub-folders”。
5.3.4、在弹出的对话框【Edit Configuration】中,配置选项卡【Build Options】:
勾选“After a “Clean””,
勾选“During manual builds”,
勾选“During auto builds”,
勾选“Specify working set of relevant resources”。
点击“Specify Resources…”勾选TestNDK工程的“jni“目录 ,Finish!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论