NDK开发 eclipse相关开发环境的搭建

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 03:47:04

    开发环境:windows+eclipse+NDK+cygwin

(推荐这个偶然发现的音乐,听着心情就会变好)

    在《android初涉NDK,从零打造你的第一个demo》(http://my.oschina.net/sosofy/blog/78353)中,我把打造第一个jni相关demo的过程大致介绍了一下,因为该工程的功能也好,代码也好都是非常非常浅显易懂的,所以用notePad++之类的文本编辑工具就能直接写好。但是如果当native code的逻辑非常复杂,代码工作量也非常之大的话,不是大神并且刚刚开始接触JNI开发的你我在不借助IDE的情况下,想必十分DT。好在eclipse中也不少好用的插件帮助我们解决这一难题。

    废话说完,进入正题。首先是CDT插件的安装,官方地址:http://www.eclipse.org/cdt/downloads.php在该页面找到你需要的版本下载安装(PS:貌似该网页提供的在线安装的地址失效Orz,所以还是下到本地安装吧)。安装完成之后,我们现在就可以用eclipse写c/c++代码了(熟悉vs开发环境的童鞋可能需要适应一下)。在上次的demo中,我们是单独编写JNI相关代码然后编译得到so文件,在拷贝到android工程中,这个过程有点繁琐,有时可能还会忘记,尤其是在以后调试的时候,反复地重复该过程会让人崩溃吧!在安装了CDT后,我们把上次的C的工程部分的D:\myfirstJNISO中的jni文件夹整个拷贝到android工程MyFirstJNI目录下(如果没有,稍后我会上传相关工程代码,不过最好还是自己实际动手做一下会比较好:D),refresh,现在我们的工程应该是这样的:

标记的部分就是我们新添加进来的jni实现部分。

现在不要急着编译,否则各种error可能会打击我们继续下去的信心。接下来,我们需要把这个android工程转换成C/C++工程进行一些开发,具体操作:File->New->Other,之后如图:


Next之后选取MyFirstJNI工程其他选项默认即可。

现在我们的工程已经转换成C工程了,打开相关的.h.c文件看看,Oh,No。是不是各种error,原因是我们还没有在CDT中设置相关环境变量,编译器找不到jni相关头文件造成的。设置过程如下:Window->Preference 然后如图定位:


在Environment中添加一些必要的环境变量,具体如下:

CPLUS_INCLUDE_PATH(这个随便你取):D:\Android\android-sdk\android-ndk-r8b\platforms\android-14\arch-arm\usr\include;D:\Android\android-sdk\android-ndk-r8b\sources\cxx-stl\stlport\stlport

(PS:红色部分是你安装NDK目录中你需要的相关平台的头文件,我这里选的最新的是14,可以根据具体要求选择,篮色部分则是一些C++中常用的头文件,比如:iostream,还有中间的";"别忘了)

CPLUS_INCLUDE_LIB_PATH(同样as you wish):D:\Android\android-sdk\android-ndk-r8b\platforms\android-14\arch-arm\usr\lib

添加完成后是这样的:


下面我们要为我们的工程设置一个专属的编译器,因为在windows下,我们无法直接运行ndk-build来编译我们的JNI代码,那么怎么做呢?往下看:

在我们的工程MyFirstJNI上右击,选择属性,接着选择"Builders",如图:


 那个红色的”NDK_Builder“就是我们要创建的专属的编译器,方法:点击New出现


(Name填上你喜欢的名字;①中是你安装的cygwin中bash.exe的路径②是bash.exe所在的目录③中则是运行bash.exe时的命令行参数;这些配置说我们要启动bash.exe然后定位到我们的MyFirstJNI工程目录然后执行$NDK/ndk-build,简单的说就把我们之前的手动过程用命令行替代了,这也就是为什么是专属编译器的原因

接着切换到Refresh选项卡,然后照着图片配置:


(很简单吧,告诉系统这个编译器是指定工程的)

再切换到Build Options选项卡,设置如下:


这里主要是设置自动编译的时机,注意红色部分,这里需要点击按钮选定我们的MyFirstJNI工程,这样我们MyFirstJNI的专属编译器就创建完成了。回到属性界面,是不是多个一个NDK_Builder,这里需要把这个编译器Up到最上面,否则我们修改JNI代码需要编译两次才能生效。

现在试试,我们创建的编译器能不能正常工作,Project->Clean...,Console中如果输出这样的就说明我们成功了


但是注意红色的部分,虽然我们已经能正确的编译出so文件了,但是工程此时还有错误:


我们已经解决了这么多的问题和麻烦,怎么能在这卡住?这个error出现是因为我们在将android工程转化为C/C++工程造成的,再次打开MyFirstJNI的属性对话框,如图:


看到没,我们的工程自己是有编译选项的,make这个本来是在*nix系统中使用的,因为我们之前已经创建了专属的编译器,所以这里将Builder Type选择为”Internal builder“,这样再clean工程就可以了。(PS:更简单的方法是在当初建立专属编译器的时候,将CDT Builder的勾选状态取消,然后多refresh几次或者暴力点重启eclipse)

    对了,有些人可能打开该对话框发现Builder Type是不可用状态,没关系解决方法如下:


照着上图所示设置,然后再返回到之前的那个设置界面,是不是能选择了?

    好了,我发现讲的有点罗嗦:D,现在我们就能在eclipse中直接开发JNI了并且也能很方便的编译。由于我接触的时间也不长,所以讲的不清楚的地方或者有误的地方,还希望大家指正,共同进步。

关于调试的部分,windows下的配置,我还在研究,有进展了更新!!

    最后,推荐一款JNI开发相关的插件sequoyah,在线安装地址:http://download.eclipse.org/sequoyah/updates/2.0/

注意要将”Group items by category“取消,否则看不到插件列表,我们只需要安装上图所选的就行了,安装完成后需要进行一些基本设置

现在右击任何一个android工程,右击选择”Android tools“出现下图则表示安装成功


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!