windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)_doc

(文档共10页)  

当前位置: 雨花文库>IT/计算机>计算机软件及应用>windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)_doc


windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

一、前言

Google Android发布了NDK,引起了很多发人员的兴趣。NDK全称:Native Development Kit,官方下载地址:http://androidappdocs.appspot.com/sdk/ndk/index.html

1.NDK是什么

The Android NDK is a toolset that lets you embed components that make use of native code in your Android applications.

Android applications run in the Dalvik virtual machine. The NDK allows you to implement parts of your applications using native-code languages such as C and C++. This can provide benefits to certain classes of applications, in the form of reuse of existing code and in some cases increased speed.

英语不好的,自己GOOGLE吧。简而言之,NDK就是一套基于C和C++底层开发API的集成工具组件,使用NDK开发编译的应用程序同样可以基于虚拟机Dalvik上“疯跑”。如果你问为啥推出NDK,敝人以为C和C++开发的应用程序其卓越性能不用提了,至少C和C++被反编译的可能性降低了很多,要比JAVA安全保密多了。

2.ANDROID NDK 带来了什么

a)一套工具,基于本机编译的C和C++源代码库。

b)一种部署在ANDROID设备上,可以将so和java一起打包成APK的方法。

c) A set of native system headers and libraries that will be supported in all future versions of the

Android platform, starting from Android 1.5. Applications that use native activities must be run on

Android 2.3 or later.(自个理解吧,最好别用GOOGLE,我试过了不是人话。)

d)NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发

人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就

可以创建出so。(此句出自网络)

二、安装cygwin

1.集成Cygwin

a)什么是cygwin

cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu

工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流

行,越来越多的开发者对cygwin产生了兴趣。(出自百度百科)

b)为啥要集成cygwin

相信你该知道可爱的android是基于linux内核的,所以咱们要基于NDK开发,至少得有一个linux的环境吧。当然你可已选择虚拟机VM,可是如果你是在windows上成长起来的,

对Linux的了解程度比我还差的话,那么相信我,还是选择cygwin吧,至少你不用来回切换

窗口了。

c)Cygwin下载与安装(cygwin.exe的版本注意选择,我是在管网新下载的,之前用了一个以前

下载好的,搞得make安装的只有3.8.0版本,低于3.8.1版本,却不知道怎么回事,纠结了好久!)

下载地址:http://www.cygwin.com。下载后会保存成setup.exe(我已经下载好在相关软件目录中),双击开始安装。在线安装时首选要选择镜像站点,建议选择。如下图所示

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

组件安装有两种方式可供选择,一是选择必须的组件如devel 下的gcc-core,gcc-g++, make

(Android NDK-r4要求gcc版本4.4.0.而GNU Make 3.8.1或者更高版本,本人就是因为make 的版本是3.8.0导致纠结了好久好久。。

唉。。大家不要再走弯路了哈!!)和lib下的glib2,各位注意要版本号对应,

尽量选择最新的版本。

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

具体选择的如下图:

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

上图中注意左侧skip的刷新图标,点击后会出现install,而右边是选择组件的名称。(相信智

商在90以上的都能看懂。)二是选择All后面的回旋图标,这样无论任何组件都将安装,其下

载量大概能有1.7G左右。(尽管这是比较脑残的做法,可是目的还是达到了,也不用选择组

件了。)如下图所示:

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

安装完成后,在环境变量里加入d:/cygwin/bin 目录。然后在命令行里输入:

make –v(注意查看版本是否3.8.1或这以上的版本)

gcc –v (注意查看版本)

g++ -v

成功显示版本,表示安装及配置成功

2.下载Android NDK.

官方下载地址:http://androidappdocs.appspot.com/sdk/ndk/index.html。我下载的是r4版本。下载后直接解压即可。鉴于都属于android 开发,所以最好把其放在android SDK的相同目录下,这样寻找Samples的时候会比较省事。

3.Eclipse组件

Android SDK 不用说了,这不是重点。ADT也不说了,单说CDT。CDT是Eclipse开发C++的组件包,可以在Eclipse的菜单栏HELP选项里选择Install new software ,然后添加站点

http://download.eclipse.org/tools/cdt/releases/galileo/(目前试过很多,只有这个地址是有效的),在线安装。有必要说明一下,使用NDK开发包来开发android,是不需要CDT的。但是你如果安装了CDT,会在review其他人写的C++ code时有帮助。

三、部署并运行hello-jni例子。

第一:首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:C: \cygwin\home\rj\.bash_profile

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

第二:打开.bash_profile文件,在最后面加入下面这句话

ANDROID_NDK_ROOT =/cygdrive/<你的盘符>/

例如:ANDROID_NDK_ROOT=/cygdrive/e/android/android-ndk-r4 (此处表示NDK安装目录)

export ANDROID_NDK_ROOT

这句话表示的是添加环境变量,就像windows下添加环境变量。然后注意保存。再打开桌面图标Cygwin,在命令行输入:cd $ ANDROID_NDK_ROOT如下图所示

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

注意环境变量的大小写。回车后会定位至你的NDK安装目录,如下图所示

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

输入命令:ls –a,会显示目录下的所有文件已验证目录配置正确。如下图所示

windows下eclipse集成cygwin编译android_NDK(即结合jni调用c-c++)

到此处:

只有有两种方法可选:方法一和方法二(这个随便自己,我个人习惯用方法一)

方法一: 在命令行中用ndk-build命令编译原生码生成.so。

1).进入要生成.so的工程目录,比如$ ANDROID_NDK_ROOT/samples/hello-jni,然后执行

$ ANDROID_NDK_ROOT/ndk-build

(R4比较特别,跟前面R1-R3的方法都不同了,完全改变了!去掉了一个步骤,在r3里是需要这个步骤的,但r4里就不需要这个r3里的步骤:

运行一下命令:build/host-setup.sh

注意无空格。运行后会提示安装完毕。

安装好NDK之后,最好花上几分钟读一读/docs目录下文档。特别是要完整阅读OVERVIEW.TXT,读完以后你就可以明白NDK的初衷以及如何使用它了。

比如:其中有说明:

Previous releases required you to run the 'build/host-setup.sh' script to

configure the NDK. However, this step has been removed in release 4 (a.k.a. r4).。

关于r3下生成.so文件的参考网址是:

http://geek.gfan.com/android-ndk-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E5%AE%89%E8 %A3%85%E5%92%8C%E9%85%8D%E7%BD%AE/)

2).在任何地方,执行

$ANDROID_NDK_ROOT/ndk-build -C $ANDROID_NDK_ROOT/samples/hello-jni

如果成功的话,会生libs目录。libs/armeabi目录下有.so文件

3)把samples/hello-jni的hello-jni目录工程拷贝到你的workspace目录下

(用SDK工具,以通常的方式编译应用,SDK的build工具会将共享库.so打包进apk的文件)启动预先配置好的Eclipse + ADT环境,创建一个Android Project,选择Create project form existring source Location = E:\ndk_workspace\hello-jni,直接确认即可开始编译并生成apk 文件,该apk文件可以直接拷贝到手机上安装运行。

详细图示如下:

然后要选择new—>project-->android project 接下来如下图所示(注意这幅图是网上截取来的,所以图中的Location :要选择你workspace目录下的hello-jni目录)

(文档共10页)