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++动态库