zoukankan      html  css  js  c++  java
  • libcurl移植到android

    一、总体概览

    C库:libcurl 3.7

    目标平台:android

    编译平台:ubuntu 12

    编译工具:ndk r7 or later

     

    二、已知方法

    1. 官网上给了两种方法,第一种方法是使用android源代码来一块编译,原文如下:

    Method using the static makefile:
          see the build notes in the packages/Android/Android.mk file.

     Android.mk如下:

    # Google Android makefile for curl and libcurl

    #

    # This file can be used when building curl using the full Android source

    # release or the NDK. Most users do not want or need to do this; please

    # instead read the Android section in docs/INSTALL for alternate

    # methods.

    #

    # Place the curl source (including this makefile) into external/curl/ in the

    # Android source tree.  Then build them with 'make curl' or just 'make libcurl'

    # from the Android root. Tested with Android versions 1.5, 2.1-2.3

    #

    # Note: you must first create a curl_config.h file by running configure in the

    # Android environment. The only way I've found to do this is tricky. Perform a

    # normal Android build with libcurl in the source tree, providing the target

    # "showcommands" to make. The build will eventually fail (because curl_config.h

    # doesn't exist yet), but the compiler commands used to build curl will be

    # shown. Now, from the external/curl/ directory, run curl's normal configure

    # command with flags that match what Android itself uses. This will mean

    # putting the compiler directory into the PATH, putting the -I, -isystem and

    # -D options into CPPFLAGS, putting the -W, -m, -f, -O and -nostdlib options

    # into CFLAGS, and putting the -Wl, -L and -l options into LIBS, along with the

    # path to the files libgcc.a, crtbegin_dynamic.o, and ccrtend_android.o.

    # Remember that the paths must be absolute since you will not be running

    # configure from the same directory as the Android make.  The normal

    # cross-compiler options must also be set. Note that the -c, -o, -MD and

    # similar flags must not be set.

    #

    # To see all the LIBS options, you'll need to do the "showcommands" trick on an

    # executable that's already buildable and watch what flags Android uses to link

    # it (dhcpcd is a good choice to watch). You'll also want to add -L options to

    # LIBS that point to the out/.../obj/lib/ and out/.../obj/system/lib/

    # directories so that additional libraries can be found and used by curl.

    #

    # The end result will be a configure command that looks something like this

    # (the environment variable A is set to the Android root path which makes the

    # command shorter):

    #

    #  A=`realpath ../..` &&

    #  PATH="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/bin:$PATH"

    #  ./configure --host=arm-linux CC=arm-eabi-gcc

    #  CPPFLAGS="-I $A/system/core/include ..."

    #  CFLAGS="-nostdlib -fno-exceptions -Wno-multichar ..."

    #  LIBS="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/lib/gcc/arm-eabi/X

    #  /interwork/libgcc.a ..."

    #

    # Finally, copy the file COPYING to NOTICE so that the curl license gets put

    # into the right place (but see the note about this below).

    3. 第二中方法使用 android ndk的脚本自己定制一套工具链,方便配置变量

    Method using a configure cross-compile (tested with Android NDK r7c, r8):
          prepare the toolchain of the Android NDK for standalone use; this can be done by invoking the script:
            ./build/tools/make-standalone-toolchain.sh
         which creates a usual cross-compile toolchain. Lets assume that you put this toolchain below /opt then invoke configure with something like:
            export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH
            ./configure --host=arm-linux-androideabi [more configure options]
            make

     

     

    三、自己方法

    第一种方法需要用到android源代码,很不方便;第二种需要配置很多configure参数才能保证make成功。我的方法是结合了以上两种方法,用./configure得到curl_config.h等文件,然后使用ndk-build来编译Android.mk,而不是直接用make.

     

    1. 搭建NDK环境:

    1.1 下载NDK

    官网下载页:http://developer.android.com/tools/sdk/ndk/index.html下载下来后,解压缩

    注:下载符合你操作系统位数的ndk;还有就是下载ndk32的,因为android的64位支持没多久,大部分还都是32位的;版本越新越好,新版本会修复很多编译器bug,支持更多的语言特性。

    1.2 配置NDK环境参数

    打开 ~/.bashrc文件:

    export NDK_HOME=~/Android /android-ndk-r8

    export PATH=$PATH:$NDK_HOME

    export PATH=$PATH:$NDK_HOME/toolchains/arm-linux-androideabi-4.6/prebuilt/linux/bin

    测试一下

    ndk-build –v

    注1:修改环境变量的方法有三种,但是以上这种关机后不会失效:

        比如要把/etc/apache/bin目录添加到PATH中

    1. #PATH=$PATH:/etc/apache/bin

      使用这种方法,每当登出PATH就会恢复

      2. #vi /etc/profile

      在适当位置添加PATH=$PATH:/etc/apache/bin

      这种方法最好,除非你强制手动修改PATH的值,否则将不会被改变

      3. #vi ~/.bash_profile

      修改PATH行,把/etc/apache/bin添加进去

      这种方法是针对用户起作用的

     

    注2:ndk-build使用有两种方法

    1. cd ~/android-ndk-r9/samples/hello-jni/jni

           ndk-build

      2. $NDK_HOME/ndk-build  -C ~/android-ndk-r9/samples/hello-jni/jni

            用 -C 指出工程目录路径

    2.    配置和编译libcurl

    2.1   下载源代码http://curl.haxx.se/download.html,解压

    2.2   命令行进入curl目录后,执行

          ./configure –host=arm-linux-androideabi

          注:记住host一定是工具链前缀

    2.3   把package/android/Android.mk修改一下,去掉后边的可执行文件相关的语句,我们只要生成静态库就行了。然后把package/android改为package/jni

          注:文件结构必须是jni/Android.mk,否则ndk-build找不到。

    2.4   命令行进入package,执行ndk-build,大功告成。

  • 相关阅读:
    收藏网站代码
    将博客搬至CSDN
    AsyncTask源码浅析
    【转】Activity的launchMode分析 及 Intent.FLAG_NEW_TASK详解
    【转】Java异常:选择Checked Exception还是Unchecked Exception?
    springAOP基本概念和配置
    Java内部类的使用小结
    数据库索引浅析
    基于LinkedBlockingQueue源码自我实现阻塞队列
    【转】HTTP中Get与Post的区别——是我见过说得最全面的
  • 原文地址:https://www.cnblogs.com/guoxiaoqian/p/3983654.html
Copyright © 2011-2022 走看看