需准备:
- android-ndk-r8d
- android sdk
- eclipse
- adt、cdt(eclipes插件)
NDK下载与安装
android-ndk-r8d下载地址:
http://dl.google.com/android/ndk/android-ndk-r8d-windows.zip
下载后,解压到你的工作目录,如:d:\java\android-ndk-r8
注:直接解压后的目录可能是android-ndk-r8d,这里我们使用的是android-ndk-r8,末尾少个d
Cygwin下载与安装
Cygwin的下载地址:http://www.cygwin.com/
点击右上角的“setup.exe”即可下载。
验证:
运行安装目录下的“Cygwin.bat”,第一次运行时,它会自动创建用户信息,用户信息存放在“.\Cygwin\home”中。
在运行“Cygwin.bat”打开的命令行窗口输入:“cygcheck -c cygwin”命令,会打印出当前Cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
分别输入:“make –v”和,“gcc –v”命令如果检测成功,会有make和gcc相关版本信息打印出来。
在Cygwin中编译NDK的hello-jni示例
设置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。
点击File - New – Project,弹出界面
选择”Android Project from Existing Code”,点Next。
在Root Directory中填写:“D:\Java\android-ndk-r8\samples\hello-jni”。注意不要选择tests,我们只需要调试HelloJni。
添加完HelloJni工程后,双击打开AndroidManifest.xml,弹出:
选中Uses Sdk,修改Min SDK version等值,否则编译时可能出现:Field requires API level 5 (current min is 1)错误。
第二步:直接以Android Aplication运行。这里要注意,你之前在使用NDK编译程序时要把这个hello-jni编译过并产生了.so文件,此处才能运行起来。
注:尽量不要使用模拟器运行,这东西太烂。用USB连上Android手机,并且打开手机上的“设定-开发-USB调试”,直接在真机上运行吧。
下载并安装Eclipse
我们需要在eclipse中安装adt、cdt并配置android sdk,这很麻烦。因此下载一个集成包,是很好的选择,如adt-bundle-windows-x86。
http://dl.google.com/android/adt/adt-bundle-windows-x86.zip
其中adt-bundle-windows-x86压缩包中包括了:
- Android SDK Manager
- android sdk
- eclipse
其中eclipse是集成了adt和cdt的版本。
这个adt-bundle-windows-x86非常好用,可以省我们很多下载和安装的麻烦事。
下载后,同样把压缩包中的sdk、eclipse,分别解压到你的工作目录,如:
D:\Java\android_sdk
D:\Java\eclipse
配置eclipse
打开eclipse,在“window –> preferences ->Android -> NDK”中添加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!”,运行后在模拟器上输出的字符串改变即说明配置成功。