android交叉编译简单介绍(在android中使⽤CC++库)
⼀、前⽂
很多好的或开源的库都是⽤C/C++写的,有时候在android中也需要⽤到这些库,因此需要交叉编译。
本⽂指的交叉编译⽐较狭隘,仅仅只指在android开发中使⽤C/C++库⽽已。
⼆、概念介绍
1、NDK
android官⽅对NDK的定义是:The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++
简单来讲,就是允许你在android中使⽤C/C++的⼀个⼯具集。
2、JNI
Java native interface-java本地调⽤,是java平台的⼀部分
它的存在,允许java和其他语⾔进⾏交互
其实主要⽤处是⽅便java使⽤本地已编译的C/C++语⾔
如何使⽤jni此处不介绍,后⾯再挖坑
3、cygwin
对cygwin的定义:Cygwin是许多的集合,最初由开发,⽤于各种版本的上,运⾏系统。Cygwin的主要⽬的是通过重新编译,将系统(例如、,以及其他系统)上的软件移植到Windows上。
可以粗糙地理解为⼀个重编译软件。(因为NDK⾥⾯的ndk-build是不可以在windows下直接执⾏的,需要重编译)
三、在android中使⽤C/C++库
1、安装ndk
很简单,此处不介绍。
2、安装cygwin
android简单教程步骤:
①下载cygwin安装(⽐较耗时,不需要更新的注意就不要更新了)
②关联ndk
到⽂件C:\cygwin\home\⽤户名\.bash_profile
修改,增加变量
ANDROID_NDK_ROOT=/cygdrive/d/android-ndk-r5b
export ANDROID_NDK_ROOT
其中d/android-ndk-r5b是ndk的路径
然后进⼊cygwin测试⼀下
这⾥就已经进⼊NDK的⽬录了
注意:
在cygwin⾥访问windows的⽬录注意前⾯都要加上/cygdrive这个路径(像前⾯定义ANDROID_NDK_ROOT时就加了)
C:\cygwin\home\⽤户名\.bash_profile只是⼀般路径,也可能在别的地⽅,也可能没有,如果没有,就⾃⼰新建⼀个,然后把修改的内容增加进去。我第⼆次安装的时候cygwin下⾯的home⽂件夹就是空的,于是我把搜索并修改了之后的.bash_profile⽂件夹放了进去。新建⽂件夹%USERPROFILE%(这个是我的home地址)
然后再修改环境变量为新建后的⽂件夹即可。
③最后,修改⼀下ndk的环境变量
修改环境变量path,增加ndk的路径
④以上,cygwin就已经配置完成。⽤ndk⾃带的例⼦检验⼀下
cd $ANDROID_NDK_ROOT
cd samples/hello-jni
$ANDROID_NDK_ROOT/ndk-build
这样,就可以在hello-jni下看到libs⽂件夹,armeabi⾥⾯就⽣成了libhello-jni.so⽂件
这个⽣成的.so⽂件就是动态库,类似于dll,可以被java所调⽤。
注:实际上命令$ANDROID_NDK_ROOT/ndk-build还是太长了,可以将命令重命名,⽅便使⽤。
alias NDK_BUILD='$ANDROID_NDK_ROOT/ndk-build'
这样以后直接使⽤NDK_BUILD这个命令即可(cygwin的操作其实基本就是linux命令操作,熟悉基本命令还是很有必要滴,会使⾃⼰⽅便很多)
3、使⽤cygwin编译C/C++库
以上,需要的东西都准备好了。(jni已经写好),假设你的app⼯程projectA下src⽬录下有个C写的库b
①进⼊jni的⽗⽬录
⼀般也就是你的⼯程⽬录
②ndk-build
完成之后,你就会发现你⼯程的libs⽂件夹下⽣成了相应的armeabi/libb.so
这样在eclipse中projectA就可以直接调⽤库b⾥的接⼝了。
四、其他
好吧,前天我是说昨天写这个的,但是还是拖到了今天(可怕的拖延症>_<)
还是⽼样⼦,先挖坑留地,明天简单介绍⼀下jni的使⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论