ubuntu Android NDK编译Libcurl

1.配置环境:    
    cd /home/jason/bin
    unzip android-ndk-r16b-linux-x86_64.zip
    sudo vi /etc/profile    追加以下内容
        export ANDROID_NDK_HOME=/home/jason/bin/android-ndk-r16b
        export PATH=$PATH:$ANDROID_NDK_HOME
    测试环境:
        ndk-build -v
        
    编写第一个ndk的c动态库.
        cd /home/jason/works/ndk-test
        vi Application.mk        追加以下内容
            APP_ABI := all
            APP_PLATFORM := 14
        mkdir jni
        cd jni
        vi Android.mk                追加以下内容
            LOCAL_PATH := $(call my-dir)
            include $(CLEAR_VARS)
            LOCAL_MODULE    := ndk_demo
            LOCAL_SRC_FILES := ndk_demo.c
            include $(BUILD_SHARED_LIBRARY)
        vi ndk_demo.c                追加以下内容
           

#include <string.h>
#include <jni.h>
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,jobject thiz )
        #if defined(__arm__)
          #if defined(__ARM_ARCH_7A__)
            #if defined(__ARM_NEON__)
              #if defined(__ARM_PCS_VFP)
                #define ABI "armeabi-v7a/NEON (hard-float)"
              #else
                #define ABI "armeabi-v7a/NEON"
              #endif
            #else
              #if defined(__ARM_PCS_VFP)
                #define ABI "armeabi-v7a (hard-float)"
              #else
                  #define ABI "armeabi-v7a"
              #endif
            #endif
          #else
            #define ABI "armeabi"
          #endif
        #elif defined(__i386__)
          #define ABI "x86"
        #elif defined(__x86_64__)
          #define ABI "x86_64"
        #elif defined(__mips64)  /* mips64el-* toolchain defines __mips__ too */
          #define ABI "mips64"
        #elif defined(__mips__)
          #define ABI "mips"
        #elif defined(__aarch64__)
          #define ABI "arm64-v8a"
        #else
          #define ABI "unknown"
        #endif
        return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI " ABI ".");
}

        $ cd ..

$ ndk-build NDK_PROJECT_PATH=.

        $ tree
                .
                ├── Application.mk
                └── jni
                    ├── Android.mk
                    └── ndk_demo.c
       

2.编译第三方的源代码 libcurl

        https://www.cnblogs.com/guoxiaoqian/p/4199580.html
        下载curl-7.57.0
        mkdir -p /home/jason/works/curl/libcurl_android/jni
        cd /home/jason/works/curl/libcurl_android/jni
        tar jxvf $CURL_PATH/curl-7.57.0.tar.bz2
        mv curl-7.57.0 curl
        vi Application.mk        追加
            APP_ABI := all
        vi Android.mk             追加
            LOCAL_PATH:= $(call my-dir)/curl
            
            CFLAGS := -Wpointer-arith -Wwrite-strings -Wunused -Winline \
             -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long \
              -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral \
               -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement \
                -Wno-system-headers -DHAVE_CONFIG_H
            
            include $(CLEAR_VARS)
            include $(LOCAL_PATH)/lib/Makefile.inc
            
            
            LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES))
            LOCAL_CFLAGS += $(CFLAGS)
            LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib
            
            LOCAL_COPY_HEADERS_TO := libcurl
            LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(HHEADERS))
            
            LOCAL_MODULE:= libcurl
            ###include $(BUILD_STATIC_LIBRARY)
            include $(BUILD_SHARED_LIBRARY)
        cd curl
        ./configure --host=arm-linux (XXXXXXX 其他配置省略)
        ./configure --host=arm-linux-androideabi --with-ssl=/openssl-android
        配置完成后会生成lib/curl_config.h,这个文件可能需要改动
        cd /home/jason/works/curl/libcurl_android/
        ndk-build        开始编译
        编译完成后会自动生成libs目录和so库文件
                jluo@jluo-ubuntu1710:/home/jason/works/curl/libcurl_android/libs$ tree
                .
                ├── arm64-v8a
                │?? └── libcurl.so
                ├── armeabi
                │?? └── libcurl.so
                ├── armeabi-v7a
                │?? └── libcurl.so
                ├── mips
                │?? └── libcurl.so
                ├── mips64
                │?? └── libcurl.so
                ├── x86
                │?? └── libcurl.so
                └── x86_64
                    └── libcurl.so
                
                7 directories, 7 files
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值