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=.
.
├── 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