首页 > 技术精文 > Android > Android JNI开发之curl静态库使用
2015
07-20

Android JNI开发之curl静态库使用

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库是一样的。

最后编辑:
作者:leehom
leehom
本博客主要是把自己的经验记录于此,方便自己以后查阅及其他遇到类似问题的朋友参考。如果你有觉得不错的文章,可以注册会员发布文章或者邮箱发给我文章地址,谢谢!
捐 赠如果觉得文章还不错,请麻烦点下广告,算是赞助下本站服务器费用,谢谢!

留下一个回复