• 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的使用。

  • 相关阅读:
    java8学习
    linux常用命令
    window操作系统分区
    java8特性
    mysql索引本质
    红黑树
    http请求传参问题解决
    老王说架构
    从URL到看到网页的过程
    RabbitMQ如何工作和RabbitMQ核心概念
  • 原文地址:https://www.cnblogs.com/arthur3/p/2721847.html
Copyright © 2020-2023  润新知