`
dingran
  • 浏览: 371679 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

curl在Android中使用的Demo

    博客分类:
  • curl
 
阅读更多

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

 

1
1
分享到:
评论
5 楼 dingran 2013-09-27  
tofaluanle 写道
我使用你这个demo测试通过。然后我自己写了个函数,建立ftp连接并下载文件,curl会返回错误码:1。请问这是为什么


什么错误码呢?也得让我看看才能知道啊
4 楼 tofaluanle 2013-09-22  
我使用你这个demo测试通过。然后我自己写了个函数,建立ftp连接并下载文件,curl会返回错误码:1。请问这是为什么
3 楼 dingran 2013-04-11  
csmap 写道
不好意思,想问下,LOCAL_SHARED_LIBRARIES不是给动态链接库设置的吗?为什么这里写的是静态?然后后面指向的libcurl,是最上面build的那个curl吗?

csmap 写道
不好意思,想问下,LOCAL_SHARED_LIBRARIES不是给动态链接库设置的吗?为什么这里写的是静态?然后后面指向的libcurl,是最上面build的那个curl吗?

这个没写错,确实是:
# 使用的本地静态库 
LOCAL_SHARED_LIBRARIES := libcurl 
这个libcurl就是以前build的静态库,通过这个关联:LOCAL_MODULE := curl 起来的。
你后面的疑问说的没错。如果是动态库不能这样搞,搞法不同。
2 楼 csmap 2013-04-10  
不好意思,想问下,LOCAL_SHARED_LIBRARIES不是给动态链接库设置的吗?为什么这里写的是静态?然后后面指向的libcurl,是最上面build的那个curl吗?
1 楼 dingran 2013-02-16  
需要注意在AndroidManifest.xml中添加网络权限,否则不能联网成功。

相关推荐

Global site tag (gtag.js) - Google Analytics