1. 在系统上安装Android NDK
1) 什么是NDK?
NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和 java 应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK 集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的文件,使你可以在你的Android程序当中用Java语言(JNI)调用这些代码.
2) 下载安装Android NDK
a.到http://developer.android.com/sdk/ndk/index.html下载最新版的WIndows版的NDK.
b.然后解压放置在任何地方都可以,目录最好不要有空格间隔的,但是我违反了,呵呵,我放在了“D:\Program Files\Android\”下面。
c.由于NDK编译代码时需要用到make和gcc,所以必须先搭建一个Linux的环境,cygwin是一个在Windows平台上运行的unix模拟环境,通过它我们可以再不用安装Linux的情况下使用NDK来编译C/C++代码了。
2.下载安装Cygwin
1) 到http://www.cygwin.com下载setup.exe,安装过程我就不赘述了,很傻瓜式的,是在线下载安装的,不过它会提示你保存安装包得地址,在选择要下载的包得时候,我这里列出需要安装的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc、g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make等包。
注意:安装目录最好不要有空格间隔的目录名,比如Program files. 我安装的目录为D:\Cygwin。
2) 测试一下是否安装成功
运行cygwin,在弹出的命令行窗口输入:
$ cygcheck -c cygwin
会打印出当前cygwin的版本和运行状态,如果status的话,则cygwin运行正常。
然后依次输入
$ gcc --version
$ g++ --version
$ gdb --version
进行测试,如果打印出来版本信息,就说明cygwin安装成功了,并且您选的包都安装正常。
那么我们可以进行下一步了。
3. 配置NDK环境变量
1) 到安装目录D:\Cygwin,这个目录就是根目录,然后打开\home\<user name>.bash_profile,我的用户名是jianke.tang ,一下的user name都用jianke.tang代替,
D:\Cygwin\home\jianke.tang\.bash_profile
2) 打开.bash_profile文件,添加
NDK_PATH=/cygdrive/D/Progra~1/Android/android-ndk-r6b
export NDK_PATH
注:NDK_PATH是我自己取的名字,NDK_PATH=/cygdrive/<your volume>/<android ndk dir>, 我的androd ndk的目录为"D:\Program Files\Android\android-sdk",
3) 打开cygwin
$ cd $NDK_PATH
如果提示黄色的字体“/cygdrive/D/Progra~1/Android/android-ndk-r6b”那么恭喜,环境变量设置成功了
4. 用NDK编译一个简单的程序
1)为了保证程序没有问题,我们用自带的例子编译一个简单的程序吧
$ cd $NDK_PATH/samples/hello-jni
$ $NDK_PATH/ndk-build
执行过程如下所示
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile thumb : hello-jni <= hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
如上述代码,它会生成一个libs目录,把编译生成的libhello-jni.so放在里面。
5.编译openSSL
1) 下载guardianproject版的openssl
下载地址:https://github.com/guardianproject/openssl-android
需要把整个工程下载下来
然后解压,我解压并改名成了:project_openssl,位置D:\project_openssl
然后打开Cygwin,
$ cd D:\project_openssl
$ $NDK_PATH/ndk-build
如果没有出现错误,恭喜你,编译成功了