為了Android上使用libcurl且支持HTTPS協議,需要依賴openssl,因此先來了解一下如何編譯OpenSSL
1.編譯ARM下的共享庫(默認的)
我使用的是guardianproject的openssl,它已經提供好了android的ndk makefile。
git clone https://github.com/guardianproject/openssl-android.git
然后直接cd到該目錄,$NDK/ndk-build就行。
注意默認的使用NDKr5b,如果沒有該版本,請在jni/Application.mk中修改工具鏈版本
這樣可編譯出ARM下的共享庫(libcrypto.so和libssl.so),這兩個庫已經可以配合libcurl支持HTTPS了。
2.編譯ARM下的靜態庫
先修改crypto/Android.mk:
# target
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../android-config.mk
LOCAL_SRC_FILES += $(local_src_files)
LOCAL_CFLAGS += $(local_c_flags)
LOCAL_C_INCLUDES += $(local_c_includes)
LOCAL_LDLIBS += -lz
ifeq ($(TARGET_ARCH),arm)
LOCAL_SRC_FILES += $(arm_src_files)
LOCAL_CFLAGS += $(arm_cflags)
else
LOCAL_SRC_FILES += $(non_arm_src_files)
endif
ifeq ($(TARGET_SIMULATOR),true)
# Make valgrind happy.
LOCAL_CFLAGS += -DPURIFY
LOCAL_LDLIBS += -ldl
endif
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:= libcrypto
include $(BUILD_STATIC_LIBRARY)
就是把最后的BUILD_SHARED_LIBRARY改成BUILD_STATIC_LIBRARY;后面其他MODULE都刪掉.
再修改ssl/Android.mk:
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../android-config.mk
LOCAL_SRC_FILES += $(local_src_files)
LOCAL_C_INCLUDES += $(local_c_includes)
LOCAL_STATIC_LIBRARIES += libcrypto
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:= libssl
include $(BUILD_STATIC_LIBRARY)
就是把SHARED都緩存STATIC,后面的其他MODULE也都刪掉
3.編譯X86版本的靜態庫
修改jni/Application.mk:
NDK_TOOLCHAIN_VERSION=4.6
APP_PROJECT_PATH := $(shell pwd)
APP_ABI := x86
TARGET_ARCH := x86
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/Android.mk
就是加上ABI和ARCH限制,然后該一下工具連VERSION,因為默認NDKr5b好像不支持x86,所以要換一個高版本的NDK
http://www.cnblogs.com/guoxiaoqian/p/4199576.html