1、工具介绍

   Cygwin:在windows平台上运行的unix模拟环境
   NDK:Native Development Kit,android平台的一部分.提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.比较简单的说,NDK是一套交叉编译工具,它可以帮你把你用C或C++书写的代码,编译为.so(类似与win下的.dll)格式的文件,使你可以在你的Android程序当中用Java语言(JNI)调用这些代码
   更多ndk的介绍见:http://blog.sina.com.cn/s/blog_70e6ed3a01019dns.html
   ndk脚本的分析见:http://blog.sina.com.cn/s/blog_70e6ed3a01019ecw.html

    下载ndk Download the NDK    下载cygwin,选择ftp://mirrors.kernel.org这个镜像,搜索Devel Install安装gcc、make、swig等工具

   ps:如此处忘了安装make,之后编译过程中会找不到make,如何在已安装完成的cygwin中安装make,可参考 http://blog.sina.com.cn/s/blog_70e6ed3a01019dmq.html

   Cygwin安装目录下,找到home/username的目录下的.bash_profile文件,打开文件在最后加上:
   NDK=/cygdrive/d:cygwin/android-ndk-r4-crystax(此为ndk的目录路径)
   export NDK

 

参考:cygwin下通过ndk交叉编译Android openCV

2、依赖cygwin的android动态库编译

cygwin的安装参考网上相关教程。

ndk找到相应版本解压即可。

1.编辑cygwin目录下的 home\user(你的用户名)\.bash_profile

比如我配置了ndk20如下:

NDKN20=/cygdrive/d/android-ndk-r20 # /Linux/android-develop/android-develop
export NDKN20

编译时从cygwin进入android项目的jni文件夹,执行以下命令进行编译:

$NDKN20/ndk-build.cmd

注意:一般执行命令没有“.cmd”但是我查看相应目录下只有带cmd的这个文件所以只能执行这个了,可以正常使用。

参考:Android:搭建NDK环境(Cygwin+android-NDK)

 

3、不依赖cygwin的Android动态库编译

NDK在7以后就不需要依赖于cygwin了。

一.下载安装android-ndk

下载android-ndk-r10d   windows 版

解压后放到某目录下 如:D:\sdk\android-ndk-r10d

高级系统设置中 添加环境变量:

ANDROID_NDK :   D:\sdk\android-ndk-r10d

PATH:  %ANDROID_NDK%

二.写.mk 文件 编译动态库

项目目录格式:

项目文件夹--jni--Android.mk

                         --Application.mk

                         --XX.h XX.cpp XX1.cpp XX1.h XX2.cpp XX2.h...

Android.mk 内容:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)  
LOCAL_CPP_EXTENSION := .cpp  
LOCAL_MODULE:= XX 
LOCAL_PRELINK_MODULE := true  
LOCAL_SRC_FILES := XX1.cpp XX2.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_CFLAGS := -Wall -std=c++11 
include $(BUILD_SHARED_LIBRARY)

Application.mk 内容:

APP_ABI:=armeabi-v7a
APP_STL := stlport_static
APP_CPPFLAGS +=-fexceptions

编译通过后与jni并列的文件夹下出现libs和obj文件夹

include $(BUILD_SHARED_LIBRARY)  生成动态库
include $(BUILD_STATIC_LIBRARY) 生成静态库

最后生成目录格式:

 

项目文件夹--jni

                 --libs

                 --obj

最后生成的动态库在libs中

中间文件在obj文件夹中。

三.注意事项

1.保证环境变量添加正确

参考:windows下使用android-ndk编译c++动态库