android ndk环境搭建详细步骤
本文主内容:
1、android ndk 安装
2、安装cygwin与使用ndk编译
3、在eclipse中集成c/c++开发环境cdt
4、安装sequoyah插件
5、jni编译环境配置
本文建立在已经完成android开发环境搭建的基础上。其基础环境至少需要包含以下内容:
1、jdk
2、eclipse
3、android sdk and adt
可以参考我之前的“android开发环境搭建”。
一、android ndk 安装与配置下载android ndk。下载地址:
下载后解压缩到你的工作目录,例如:d:\java\android-ndk-r8,结果如下图:
注意:samples下面包含几个实例开发演示项目,第一次接触ndk开发,建议先从示例开始。
docs内是技术文档,英语能力强的可以研究研究。
二、安装cygwin与使用ndk编译由于ndk开发大都涉及到c/c++在gcc环境下编译、运行,所以在windows环境下,需要用cygwin模拟linux编译环境。
下载:
cygwin的下载地址:
点击右上角的“setup.exe”即可下载。
安装:
第一步:运行setup.exe程序,直接点击next进入下一步。
第二步:选择安装方式。第一次可以采用direct connection在线下载安装,如有现成的离线包,可以选择离线安装(install from local directory)。
第三步:选择安装目录。比如d:\java\cygwin,注意此目录是指cygwin最终的安装目录,不是下载文件暂存目录。
第四步:设置本地包暂存路径。暂存目录默认是放到setup.exe的同级目录下,建议放到指定的文件夹,如d:\cygwin_install_file。安装完成后把这个文件夹打包备份,以后再配置时不用重新下载。
第五步:设置网络连接方式。这个目前河蟹没爬过来,选第一个即可。
第六步:选择下载站点地址。据说国内163站点的速度不错,我也是用的这个。
第七步:等待加载安装项载入,选择安装项。点击devel-default,使之变成devel-install,展开后可以看到其下的子项被选中了(网上多数教程都说选中某12个包,找起来太坑爹了,直接全下载了吧,全选多了150m左右)。此界面其他设置都不用动。
第八步:等待下载完成。下载完成时间决定于你选择的安装包数量及网络连接速度,安装我安装的版本,约983m,下载完成后会自动安装到上文设置的安装目录,安装也要时间的,总时间较长,去吃个饭没啥问题。
提醒:第四步的备份建议,尽量去做。如果有备份,第二步中选择离线安装。
验证:
运行安装目录下的“cygwin.bat”,第一次运行时,它会自动创建用户信息,用户信息存放在“.\cygwin\home”中。
在运行“cygwin.bat”打开的命令行窗口输入:“cygcheck -c cygwin”命令,会打印出当前cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
分别输入:“make –v”和,“gcc –v”命令如果检测成功,会有make和gcc相关版本信息打印出来。
设置ndk路径:
在windows的系统环境变量中添加ndk的路径。使用“/cygdrive/d/java/android-ndk-r8”这种linux风格路径,如果使用windows下的“d:\java\android-ndk-r8”,cygwin在编译时会发出警告。
运行cygwin命令行,可以直接使用此环境变量,当然也可以手动的cd到该目录:
使用ndk编译程序:
现在我们用安装好的ndk来编译一个ndk提供的sample程序hello-jni(我的目录位于:d:\java\android-ndk-r8\samples\hello-jni)。
第一步:运行cygwin,配置环境变量后可输入“cd $ndk/samples/hello-jni/”,未配置则输入命令“cd /cygdrive/d/java/android-ndk-r8/samples/hello-jni”,进入到“hello-jni”工程目录。
第二步:编译。输入命令“$ndk/ndk-build”命令即可编译。ndk-build是调用ndk的编译程序。
关于下面的错误,我没遇到,但是前人有总结,记录如下:
错误:android ndk: host 'awk' tool is outdated。
解决方法:打开目录“d:\java\android-ndk-r8\prebuilt\windows\bin\”,删除awk.exe(为保险起见请先备份)。
第三步:到”…/hello-jni/libs/armeabi“目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!
导入ndk的hello-jni示例到eclipse中:
第一步:在eclipse中新建一个android工程hellojni。在create android project时勾选“create project from existing source”,location中填“d:\java\android-ndk-r8\samples\hello-jni” (注意:在选择api level时需要选择1.5或更高的版本)。
第二步:直接以android aplication运行。这里要注意,你之前在使用ndk编译程序时要把这个hello-jni编译过并产生了.so文件,此处才能运行起来。
三、在eclipse中集成c/c++开发环境cdtcdt的安装可以使我们在一个工程中,同时开发基于c/c++的native代码和基于java语言的壳,之后的配置还可以使得一次编译两部分代码。
下载:
下载地址:
说明:
eclipse c/c++ ide indigo sr2:是带cdt的eclipse开发环境。
p2 software repository:在线安装的地址。(似乎被河蟹爬了)
cdt-master-8.0.2.zip:这个是cdt的离线安装包。(推荐使用这个,保留离线包,复用)
离线安装:
eclipse -> help -> install new software,点击add。name:随意,建议使用好记的“cdt_版本”。location:点击archive,定位到下载的“cdt-master-8.0.2.zip”文件。
错误:
如果location的下面出现“duplicate location”错误,请到window -> preferences -> install/update -> avaliable software site中找到该条,remove之。
验证:
安装完成后,在eclispe中新建一个项目,如果出现了c/c++项目,则表明cdt插件安装成功了。
四、安装sequoyah插件sequoyah插件用于设置android工程对native开发的支持。
官方网址:
在线安装:
官网提供了用于在线安装的update site地址以及安装包的下载地址。貌似安装包才1m多,在线安装也没被河蟹爬过,直接在线安装了。勾选全部列出的可安装项并完成安装。
location:
注意:
在安装界面不要勾选“group items by category”复选框,默认是勾选的,出现了列表为空(there are no categorized items)的情况。
配置:
安装完sequoyah插件后,为android配置ndk路径。
在“window –> preferences ->android -> 本机开发”中添加ndk的路径。
验证:
右键之前建立的“hellojni”项目,在“android tools”选项中包含“add native support…”选项即成功。
五、jni编译环境配置仍旧以之前建立的“hellojni”为例,到目前为止,如果我们修改“/hellojni/jni/hello-jni.c”文件,动态链接库libhello-jni.so文件却不会被重新编译生成。这是因为我们没有给jni项目添加它需要的编译配置和依赖库。现在我们来配置它。
第一步:转换工程。点击“文件 -> 新建 -> 其他”(快捷键:ctrl+n)。选择“c/c++”下的“convert to a c/c++ project(adds c/c++ nature)”。进入“下一步”。
第二步:选中你刚才建的“hellojni”工程,下面左边选“makefile project”右边选“cygwin gcc”。确定后提示的“透视图”不清楚是什么,点击“是”即可。
第三步:在“hellojni”工程上右键,选择“属性”。配置“c/c++ build”和“c/c++ general ->paths and symbols”。
c/c++ build:点击“c/c++ build”,在右边的“builder settings”中去掉默认勾选的“use default build command”复选框。设置build command为“bash d:\java\android-ndk-r8\ndk-build”。
c/c++ general ->paths and symbols:在includes下add新的gnu c依赖路径。此“hellojni”工程需要“d:\java\android-ndk-r8\platforms\android-8\arch-arm\usr\include”即可,以后根据不同项目选择不同的依赖库。
验证:
将“/hellojni/jni/hello-jni.c”中的字符串“hello from jni !”如改为“hello jni from baron!”,运行后在模拟器上输出的字符串改变即说明配置成功。