在Android源码环境下编译出curl.a静态库后可以放到JNI下直接使用了。
要注意的是,在Android.mk中需要这样将静态库编译到jni的动态库中。
LOCAL_PATH := $(call my-dir) #使用静态库 include $(CLEAR_VARS) LOCAL_MODULE := curl LOCAL_SRC_FILES := ./curllib/libcurl.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_CFLAGS := -D_GNU_SOURCE LOCAL_CPPFLAGS := -frtti # 打算编译出的动态库的名字 LOCAL_MODULE:= jni_curl # 使用的本地静态库 LOCAL_SHARED_LIBRARIES := libcurl LOCAL_SRC_FILES := jni_main.cpp # 如果不包含这一句的话,会提示:__android_log_print 未定义 LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
参见NDK中的prebuild一章。
2.如果要在curl的使用过程中使用stl的c++就需要有Application.mk文件,里面的内容注释都有。
例子以www.baidu.com为例,简单使用了一下。返回的数据都能被打印出来。
CURL *curl;
CURLcode res;
// 接受返回的内容,用于打印出来看
std::string content;
// char content[1024*20];
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Post_Response);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
res = curl_easy_perform(curl);
if (0!=res) {
// printf("curl error: %d\n", res);
LOGD("curl error: %d\n", res);
}
LOGD("curl error: %d\n", res);
LOGD("curl content = %s \n", content.c_str());
curl_easy_cleanup(curl);
}
curl_global_cleanup();
详细内容请参考Demo,附件中: