curl在Android中使用的Demo

      在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,附件中:

相关推荐