Android JNI开发之curl静态库使用

Home / Android MrLee 2015-7-20 4957

curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。因此将其移植到android平台使用。 使用方法也非常之简单,在Android.mk文件中简单配置一下,下面给出一部分代码供参考。
LOCAL_PATH := $(call my-dir)
BOOST_VERSION      := 1_55
PROJECT_ROOT       := $(LOCAL_PATH)
BOOST_INCLUDE_PATH := D:/boost/boost/include/boost-1_55
BOOST_LIB_PATH     := D:/boost/boost/lib
GOOGLE_INCLUDE_PATH := D:/boost/boost
CURL_INCLUDE_PATH := D:/boost/boost/curl
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_MODULE_FILENAME := test
LOCAL_CFLAGS += -std=c++11
LOCAL_LDFLAGS += -L$(BOOST_LIB_PATH)
	-lboost_system-gcc-mt-$(BOOST_VERSION)
	-lboost_thread-gcc-mt-$(BOOST_VERSION)
	-lprotobuf_static
	-lgnustl_static
	-lcurl
	-llog
LOCAL_C_INCLUDES:= $(BOOST_INCLUDE_PATH)
LOCAL_C_INCLUDES+= $(GOOGLE_INCLUDE_PATH)
LOCAL_C_INCLUDES+= $(CURL_INCLUDE_PATH)
LOCAL_SRC_FILES :=
	com_jni_test.c
include $(BUILD_SHARED_LIBRARY)
$(call import-add-path,$(LOCAL_PATH))

然后编辑测试代码:
JNIEXPORT jint JNICALL Java_curltest_test_JniTest_curlInit
  (JNIEnv *env, jobject obj)
{
	LOGE("Java_dingran_curltest_test_JniTest_curlInit in...");
	CURL *curl;
	CURLcode res;
	// 接受返回的内容,用于打印出来看
	std::string content;
	    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) {
	            LOGD("curl error: %dn", res);
	        }
	        LOGD("curl error: %dn", res);
	        LOGD("curl content = %s n", content.c_str());
	        curl_easy_cleanup(curl);
	    }
	curl_global_cleanup();
	LOGE("Java_dingran_curltest_test_JniTest_curlInit exit...");
    return 0;
}

20150720182533

红色代码部分特别注意,不要漏掉了。 点击下载.a静态库libcurl
另外附上一个Google的Protobuf库。protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 libprotobuf_static 用法同curl库是一样的。

本文链接:https://www.it72.com/3724.htm

推荐阅读
最新回复 (0)
返回