android交叉编译简单介绍(在android中使用C/C++库)

一、前文

很多好的或开源的库都是用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++的一个工具集。

下载地址:http://developer.android.com/tools/sdk/ndk/index.html

2、JNI

Java native interface-java本地调用,是java平台的一部分

它的存在,允许java和其他语言进行交互

其实主要用处是方便java使用本地已编译的C/C++语言

如何使用jni此处不介绍,后面再挖坑

3、cygwin

维基百科对cygwin的定义:Cygwin是许多自由软件的集合,最初由Cygnus Solutions开发,用于各种版本的Microsoft Windows上,运行UNIX类系统。Cygwin的主要目的是通过重新编译,将POSIX系统(例如LinuxBSD,以及其他Unix系统)上的软件移植到Windows上。

可以粗糙地理解为一个重编译软件。(因为NDK里面的ndk-build是不可以在windows下直接执行的,需要重编译)

三、在android中使用C/C++库

1、安装ndk

很简单,此处不介绍。

2、安装cygwin

安装可以参考本人的:http://www.cnblogs.com/arthur3/p/3244901.html

步骤:

①下载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的使用。

转载于:https://www.cnblogs.com/arthur3/archive/2012/10/12/2721847.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值