本文主内容:
1、AndroidNDK安装
2、安装Cygwin与使用NDK编译
3、在Eclipse中集成C/C++开发环境CDT
4、安装Sequoyah插件
5、JNI编译环境配置
本文建立在已经完成Android开发环境搭建的基础上。其基础环境至少需要包含以下内容:
1、JDK
2、Eclipse
3、AndroidSDKandADT
可以参考我之前的Android开发环境搭建。
一、AndroidNDK安装与配置下载AndroidNDK。下载地址:http://developer.android.com/tools/sdk/ndk/index.html
下载后解压缩到你的工作目录,例如:D:\Java\android-ndk-r8,结果如下图:
注意:samples下面包含几个实例开发演示项目,第一次接触NDK开发,建议先从示例开始。
docs内是技术文档,英语能力强的可以研究研究。
二、安装Cygwin与使用NDK编译由于NDK开发大都涉及到C/C++在GCC环境下编译、运行,所以在Windows环境下,需要用Cygwin模拟Linux编译环境。
下载:
Cygwin的下载地址:http://www.cygwin.com/
点击右上角的setup.exe即可下载。
安装:
第一步:运行setup.exe程序,直接点击Next进入下一步。
第二步:选择安装方式。第一次可以采用DirectConnection在线下载安装,如有现成的离线包,可以选择离线安装(InstallfromLocalDirectory)。
第三步:选择安装目录。比如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-ccygwin命令,会打印出当前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的编译程序。
关于下面的错误,我没遇到,但是前人有总结,记录如下:
错误:AndroidNDK:Host'awk'toolisoutdated。
解决方法:打开目录D:\Java\android-ndk-r8\prebuilt\windows\bin\,删除awk.exe(为保险起见请先备份)。
第三步:到/hello-jni/libs/armeabi目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!
导入NDK的hello-jni示例到Eclipse中:
第一步:在Eclipse中新建一个Android工程HelloJni。在CreateAndroidProject时勾选Createprojectfromexistingsource,Location中填D:\Java\android-ndk-r8\samples\hello-jni(注意:在选择APIlevel时需要选择1.5或更高的版本)。
第二步:直接以AndroidAplication运行。这里要注意,你之前在使用NDK编译程序时要把这个hello-jni编译过并产生了.so文件,此处才能运行起来。
三、在Eclipse中集成C/C++开发环境CDTCDT的安装可以使我们在一个工程中,同时开发基于C/C++的Native代码和基于Java语言的壳,之后的配置还可以使得一次编译两部分代码。
下载:
下载地址:http://www.eclipse.org/cdt/downloads.php
说明:
EclipseC/C++IDEIndigoSR2:是带CDT的Eclipse开发环境。
p2softwarerepository:在线安装的地址。(似乎被河蟹爬了)
cdt-master-8.0.2.zip:这个是CDT的离线安装包。(推荐使用这个,保留离线包,复用)
离线安装:
Eclipse->Help->InstallNewSoftware,点击add。Name:随意,建议使用好记的CDT_版本。Location:点击Archive,定位到下载的cdt-master-8.0.2.zip文件。
错误:
如果Location的下面出现Duplicatelocation错误,请到Window->preferences->Install/Update->AvaliableSoftwareSite中找到该条,remove之。
验证:
安装完成后,在Eclispe中新建一个项目,如果出现了C/C++项目,则表明CDT插件安装成功了。
四、安装Sequoyah插件Sequoyah插件用于设置Android工程对Native开发的支持。
官方网址:http://www.eclipse.org/sequoyah/downloads/
在线安装:
官网提供了用于在线安装的UpdateSite地址以及安装包的下载地址。貌似安装包才1M多,在线安装也没被河蟹爬过,直接在线安装了。勾选全部列出的可安装项并完成安装。
Location:http://download.eclipse.org/sequoyah/updates/2.0/
注意:
在安装界面不要勾选Groupitemsbycategory复选框,默认是勾选的,出现了列表为空(Therearenocategorizeditems)的情况。
配置:
安装完Sequoyah插件后,为Android配置NDK路径。
在window–>preferences->Android->本机开发中添加NDK的路径。
验证:
右键之前建立的HelloJni项目,在AndroidTools选项中包含AddNativeSupport选项即成功。
五、JNI编译环境配置仍旧以之前建立的HelloJni为例,到目前为止,如果我们修改/HelloJni/jni/hello-jni.c文件,动态链接库libhello-jni.so文件却不会被重新编译生成。这是因为我们没有给JNI项目添加它需要的编译配置和依赖库。现在我们来配置它。
第一步:转换工程。点击文件->新建->其他(快捷键:Ctrl+N)。选择C/C++下的ConverttoaC/C++Project(AddsC/C++Nature)。进入下一步。
第二步:选中你刚才建的HelloJni工程,下面左边选Makefileproject右边选CygwinGCC。确定后提示的透视图不清楚是什么,点击是即可。
第三步:在HelloJni工程上右键,选择属性。配置C/C++Build和C/C++General->PathsandSymbols。
C/C++Build:点击C/C++Build,在右边的BuilderSettings中去掉默认勾选的Usedefaultbuildcommand复选框。设置Buildcommand为bashD:\Java\android-ndk-r8\ndk-build。
C/C++General->PathsandSymbols:在Includes下add新的GNUC依赖路径。此HelloJni工程需要D:\Java\android-ndk-r8\platforms\android-8\arch-arm\usr\include即可,以后根据不同项目选择不同的依赖库。
验证:
将/HelloJni/jni/hello-jni.c中的字符串HellofromJNI!如改为HelloJNIfromBaron!,运行后在模拟器上输出的字符串改变即说明配置成功。