zoukankan      html  css  js  c++  java
  • android通过NDK连接网络下载图片到本地

    参考文章:http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html 及提供的 NDK project files

    材料找了挺久的结果发现被墙了..对此表示无语....不发表意见...

    以下方法是通过curl库进行访问网络的...这里提供下载地址:http://curl.haxx.se/download.html

    一、在NDK目录下建立生成库的文件结构。

        在apps目录下创建目录   \apps\curljni\project\jni\curl

    二、配置下载的curl-7.29.0.tar.gz

     将curl官方文档解压得到的lib、include、src文件夹整个复制到\apps\curljni\project\jni\curl目录下

     用以下内容来覆盖复制过来的文件夹lib下的curl_config.h    //配置curl用到的功能,从上面提供 NDK project files下载地址里面有

    View Code
    /* lib/curl_config.h.  Generated from curl_config.h.in by configure.  */
    /* lib/curl_config.h.in.  Generated from configure.ac by autoheader.  */
    
    /* when building libcurl itself */
    /* #undef BUILDING_LIBCURL */
    
    /* Location of default ca bundle */
    /* #undef CURL_CA_BUNDLE */
    
    /* Location of default ca path */
    /* #undef CURL_CA_PATH */
    
    /* to disable cookies support */
    /* #undef CURL_DISABLE_COOKIES */
    
    /* to disable cryptographic authentication */
    /* #undef CURL_DISABLE_CRYPTO_AUTH */
    
    /* to disable DICT */
    /* #undef CURL_DISABLE_DICT */
    
    /* to disable FILE */
    /* #undef CURL_DISABLE_FILE */
    
    /* to disable FTP */
    #define CURL_DISABLE_FTP 1
    
    /* to disable HTTP */
    /* #undef CURL_DISABLE_HTTP */
    
    /* to disable IMAP */
    #define CURL_DISABLE_IMAP 1
    
    /* to disable LDAP */
    #define CURL_DISABLE_LDAP 1
    
    /* to disable LDAPS */
    #define CURL_DISABLE_LDAPS 1
    
    /* to disable POP3 */
    #define CURL_DISABLE_POP3 1
    
    /* to disable proxies */
    /* #undef CURL_DISABLE_PROXY */
    
    /* to disable RTSP */
    #define CURL_DISABLE_RTSP 1
    
    /* to disable SMTP */
    #define CURL_DISABLE_SMTP 1
    
    /* to disable TELNET */
    #define CURL_DISABLE_TELNET 1
    
    /* to disable TFTP */
    #define CURL_DISABLE_TFTP 1
    
    /* to disable verbose strings */
    /* #undef CURL_DISABLE_VERBOSE_STRINGS */
    
    /* to make a symbol visible */
    /* #undef CURL_EXTERN_SYMBOL */
    
    /* to enable hidden symbols */
    /* #undef CURL_HIDDEN_SYMBOLS */
    
    /* W$ LDAP with non-W$ compiler */
    /* #undef CURL_LDAP_HYBRID */
    
    /* Use W$ LDAP implementation */
    /* #undef CURL_LDAP_WIN */
    
    /* when not building a shared library */
    /* #undef CURL_STATICLIB */
    
    /* your Entropy Gathering Daemon socket pathname */
    /* #undef EGD_SOCKET */
    
    /* Define if you want to enable IPv6 support */
    /* #undef ENABLE_IPV6 */
    
    /* Define to the type qualifier of arg 1 for getnameinfo. */
    #define GETNAMEINFO_QUAL_ARG1 const
    
    /* Define to the type of arg 1 for getnameinfo. */
    #define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
    
    /* Define to the type of arg 2 for getnameinfo. */
    #define GETNAMEINFO_TYPE_ARG2 socklen_t
    
    /* Define to the type of args 4 and 6 for getnameinfo. */
    #define GETNAMEINFO_TYPE_ARG46 size_t
    
    /* Define to the type of arg 7 for getnameinfo. */
    #define GETNAMEINFO_TYPE_ARG7 int
    
    /* Specifies the number of arguments to getservbyport_r */
    /* #undef GETSERVBYPORT_R_ARGS */
    
    /* Specifies the size of the buffer to pass to getservbyport_r */
    /* #undef GETSERVBYPORT_R_BUFSIZE */
    
    /* Define to 1 if you have the alarm function. */
    #define HAVE_ALARM 1
    
    /* Define to 1 if you have the <alloca.h> header file. */
    #define HAVE_ALLOCA_H 1
    
    /* Define to 1 if you have the <arpa/inet.h> header file. */
    #define HAVE_ARPA_INET_H 1
    
    /* Define to 1 if you have the <arpa/tftp.h> header file. */
    /* #undef HAVE_ARPA_TFTP_H */
    
    /* Define to 1 if you have the <assert.h> header file. */
    #define HAVE_ASSERT_H 1
    
    /* Define to 1 if you have the basename function. */
    #define HAVE_BASENAME 1
    
    /* Define to 1 if bool is an available type. */
    #define HAVE_BOOL_T 1
    
    /* Define to 1 if you have the clock_gettime function and monotonic timer. */
    #define HAVE_CLOCK_GETTIME_MONOTONIC 1
    
    /* Define to 1 if you have the closesocket function. */
    /* #undef HAVE_CLOSESOCKET */
    
    /* Define to 1 if you have the CloseSocket camel case function. */
    /* #undef HAVE_CLOSESOCKET_CAMEL */
    
    /* Define to 1 if you have the connect function. */
    #define HAVE_CONNECT 1
    
    /* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
    /* #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA */
    
    /* Define to 1 if you have the <crypto.h> header file. */
    /* #undef HAVE_CRYPTO_H */
    
    /* Define to 1 if you have the <des.h> header file. */
    /* #undef HAVE_DES_H */
    
    /* Define to 1 if you have the <dlfcn.h> header file. */
    #define HAVE_DLFCN_H 1
    
    /* Define to 1 if you have the `ENGINE_cleanup' function. */
    /* #undef HAVE_ENGINE_CLEANUP */
    
    /* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
    /* #undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES */
    
    /* Define to 1 if you have the <errno.h> header file. */
    #define HAVE_ERRNO_H 1
    
    /* Define to 1 if you have the <err.h> header file. */
    /* #undef HAVE_ERR_H */
    
    /* Define to 1 if you have the fcntl function. */
    #define HAVE_FCNTL 1
    
    /* Define to 1 if you have the <fcntl.h> header file. */
    #define HAVE_FCNTL_H 1
    
    /* Define to 1 if you have a working fcntl O_NONBLOCK function. */
    #define HAVE_FCNTL_O_NONBLOCK 1
    
    /* Define to 1 if you have the fdopen function. */
    #define HAVE_FDOPEN 1
    
    /* Define to 1 if you have the `fork' function. */
    #define HAVE_FORK 1
    
    /* Define to 1 if you have the freeaddrinfo function. */
    #define HAVE_FREEADDRINFO 1
    
    /* Define to 1 if you have the freeifaddrs function. */
    /* #undef HAVE_FREEIFADDRS */
    
    /* Define to 1 if you have the ftruncate function. */
    #define HAVE_FTRUNCATE 1
    
    /* Define to 1 if you have a working getaddrinfo function. */
    #define HAVE_GETADDRINFO 1
    
    /* Define to 1 if the getaddrinfo function is threadsafe. */
    #define HAVE_GETADDRINFO_THREADSAFE 1
    
    /* Define to 1 if you have the `geteuid' function. */
    #define HAVE_GETEUID 1
    
    /* Define to 1 if you have the gethostbyaddr function. */
    #define HAVE_GETHOSTBYADDR 1
    
    /* Define to 1 if you have the gethostbyaddr_r function. */
    /* #undef HAVE_GETHOSTBYADDR_R */
    
    /* gethostbyaddr_r() takes 5 args */
    /* #undef HAVE_GETHOSTBYADDR_R_5 */
    
    /* gethostbyaddr_r() takes 7 args */
    /* #undef HAVE_GETHOSTBYADDR_R_7 */
    
    /* gethostbyaddr_r() takes 8 args */
    /* #undef HAVE_GETHOSTBYADDR_R_8 */
    
    /* Define to 1 if you have the gethostbyname function. */
    #define HAVE_GETHOSTBYNAME 1
    
    /* Define to 1 if you have the gethostbyname_r function. */
    #define HAVE_GETHOSTBYNAME_R 1
    
    /* gethostbyname_r() takes 3 args */
    /* #undef HAVE_GETHOSTBYNAME_R_3 */
    
    /* gethostbyname_r() takes 5 args */
    /* #undef HAVE_GETHOSTBYNAME_R_5 */
    
    /* gethostbyname_r() takes 6 args */
    #define HAVE_GETHOSTBYNAME_R_6 1
    
    /* Define to 1 if you have the gethostname function. */
    #define HAVE_GETHOSTNAME 1
    
    /* Define to 1 if you have a working getifaddrs function. */
    /* #undef HAVE_GETIFADDRS */
    
    /* Define to 1 if you have the getnameinfo function. */
    #define HAVE_GETNAMEINFO 1
    
    /* Define to 1 if you have the `getpass_r' function. */
    /* #undef HAVE_GETPASS_R */
    
    /* Define to 1 if you have the `getppid' function. */
    #define HAVE_GETPPID 1
    
    /* Define to 1 if you have the `getprotobyname' function. */
    #define HAVE_GETPROTOBYNAME 1
    
    /* Define to 1 if you have the `getpwuid' function. */
    #define HAVE_GETPWUID 1
    
    /* Define to 1 if you have the `getrlimit' function. */
    #define HAVE_GETRLIMIT 1
    
    /* Define to 1 if you have the getservbyport_r function. */
    /* #undef HAVE_GETSERVBYPORT_R */
    
    /* Define to 1 if you have the `gettimeofday' function. */
    #define HAVE_GETTIMEOFDAY 1
    
    /* Define to 1 if you have a working glibc-style strerror_r function. */
    /* #undef HAVE_GLIBC_STRERROR_R */
    
    /* Define to 1 if you have a working gmtime_r function. */
    #define HAVE_GMTIME_R 1
    
    /* if you have the gssapi libraries */
    /* #undef HAVE_GSSAPI */
    
    /* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */
    /* #undef HAVE_GSSAPI_GSSAPI_GENERIC_H */
    
    /* Define to 1 if you have the <gssapi/gssapi.h> header file. */
    /* #undef HAVE_GSSAPI_GSSAPI_H */
    
    /* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */
    /* #undef HAVE_GSSAPI_GSSAPI_KRB5_H */
    
    /* if you have the GNU gssapi libraries */
    /* #undef HAVE_GSSGNU */
    
    /* if you have the Heimdal gssapi libraries */
    /* #undef HAVE_GSSHEIMDAL */
    
    /* if you have the MIT gssapi libraries */
    /* #undef HAVE_GSSMIT */
    
    /* Define to 1 if you have the `idna_strerror' function. */
    /* #undef HAVE_IDNA_STRERROR */
    
    /* Define to 1 if you have the `idn_free' function. */
    /* #undef HAVE_IDN_FREE */
    
    /* Define to 1 if you have the <idn-free.h> header file. */
    /* #undef HAVE_IDN_FREE_H */
    
    /* Define to 1 if you have the <ifaddrs.h> header file. */
    /* #undef HAVE_IFADDRS_H */
    
    /* Define to 1 if you have the `inet_addr' function. */
    #define HAVE_INET_ADDR 1
    
    /* Define to 1 if you have the inet_ntoa_r function. */
    /* #undef HAVE_INET_NTOA_R */
    
    /* inet_ntoa_r() takes 2 args */
    /* #undef HAVE_INET_NTOA_R_2 */
    
    /* inet_ntoa_r() takes 3 args */
    /* #undef HAVE_INET_NTOA_R_3 */
    
    /* Define to 1 if you have a IPv6 capable working inet_ntop function. */
    #define HAVE_INET_NTOP 1
    
    /* Define to 1 if you have a IPv6 capable working inet_pton function. */
    #define HAVE_INET_PTON 1
    
    /* Define to 1 if you have the <inttypes.h> header file. */
    #define HAVE_INTTYPES_H 1
    
    /* Define to 1 if you have the ioctl function. */
    #define HAVE_IOCTL 1
    
    /* Define to 1 if you have the ioctlsocket function. */
    /* #undef HAVE_IOCTLSOCKET */
    
    /* Define to 1 if you have the IoctlSocket camel case function. */
    /* #undef HAVE_IOCTLSOCKET_CAMEL */
    
    /* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
       */
    /* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
    
    /* Define to 1 if you have a working ioctlsocket FIONBIO function. */
    /* #undef HAVE_IOCTLSOCKET_FIONBIO */
    
    /* Define to 1 if you have a working ioctl FIONBIO function. */
    #define HAVE_IOCTL_FIONBIO 1
    
    /* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
    #define HAVE_IOCTL_SIOCGIFADDR 1
    
    /* Define to 1 if you have the <io.h> header file. */
    /* #undef HAVE_IO_H */
    
    /* if you have the Kerberos4 libraries (including -ldes) */
    /* #undef HAVE_KRB4 */
    
    /* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */
    /* #undef HAVE_KRB_GET_OUR_IP_FOR_REALM */
    
    /* Define to 1 if you have the <krb.h> header file. */
    /* #undef HAVE_KRB_H */
    
    /* Define to 1 if you have the lber.h header file. */
    /* #undef HAVE_LBER_H */
    
    /* Define to 1 if you have the ldapssl.h header file. */
    /* #undef HAVE_LDAPSSL_H */
    
    /* Define to 1 if you have the ldap.h header file. */
    /* #undef HAVE_LDAP_H */
    
    /* Use LDAPS implementation */
    /* #undef HAVE_LDAP_SSL */
    
    /* Define to 1 if you have the ldap_ssl.h header file. */
    /* #undef HAVE_LDAP_SSL_H */
    
    /* Define to 1 if you have the `ldap_url_parse' function. */
    /* #undef HAVE_LDAP_URL_PARSE */
    
    /* Define to 1 if you have the <libgen.h> header file. */
    #define HAVE_LIBGEN_H 1
    
    /* Define to 1 if you have the `idn' library (-lidn). */
    /* #undef HAVE_LIBIDN */
    
    /* Define to 1 if you have the `resolv' library (-lresolv). */
    /* #undef HAVE_LIBRESOLV */
    
    /* Define to 1 if you have the `resolve' library (-lresolve). */
    /* #undef HAVE_LIBRESOLVE */
    
    /* Define to 1 if you have the `ssh2' library (-lssh2). */
    /* #undef HAVE_LIBSSH2 */
    
    /* Define to 1 if you have the <libssh2.h> header file. */
    /* #undef HAVE_LIBSSH2_H */
    
    /* Define to 1 if you have the `libssh2_version' function. */
    /* #undef HAVE_LIBSSH2_VERSION */
    
    /* Define to 1 if you have the `ssl' library (-lssl). */
    /* #undef HAVE_LIBSSL */
    
    /* if zlib is available */
    /* #undef HAVE_LIBZ */
    
    /* Define to 1 if you have the <limits.h> header file. */
    #define HAVE_LIMITS_H 1
    
    /* if your compiler supports LL */
    #define HAVE_LL 1
    
    /* Define to 1 if you have the <locale.h> header file. */
    #define HAVE_LOCALE_H 1
    
    /* Define to 1 if you have a working localtime_r function. */
    #define HAVE_LOCALTIME_R 1
    
    /* Define to 1 if the compiler supports the 'long long' data type. */
    #define HAVE_LONGLONG 1
    
    /* Define to 1 if you have the malloc.h header file. */
    #define HAVE_MALLOC_H 1
    
    /* Define to 1 if you have the memory.h header file. */
    #define HAVE_MEMORY_H 1
    
    /* Define to 1 if you have the memrchr function or macro. */
    #define HAVE_MEMRCHR 1
    
    /* Define to 1 if you have the MSG_NOSIGNAL flag. */
    #define HAVE_MSG_NOSIGNAL 1
    
    /* Define to 1 if you have the <netdb.h> header file. */
    #define HAVE_NETDB_H 1
    
    /* Define to 1 if you have the <netinet/in.h> header file. */
    #define HAVE_NETINET_IN_H 1
    
    /* Define to 1 if you have the <netinet/tcp.h> header file. */
    #define HAVE_NETINET_TCP_H 1
    
    /* Define to 1 if you have the <net/if.h> header file. */
    #define HAVE_NET_IF_H 1
    
    /* Define to 1 if NI_WITHSCOPEID exists and works. */
    /* #undef HAVE_NI_WITHSCOPEID */
    
    /* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
       */
    /* #undef HAVE_OLD_GSSMIT */
    
    /* Define to 1 if you have the <openssl/crypto.h> header file. */
    /* #undef HAVE_OPENSSL_CRYPTO_H */
    
    /* Define to 1 if you have the <openssl/engine.h> header file. */
    /* #undef HAVE_OPENSSL_ENGINE_H */
    
    /* Define to 1 if you have the <openssl/err.h> header file. */
    /* #undef HAVE_OPENSSL_ERR_H */
    
    /* Define to 1 if you have the <openssl/pem.h> header file. */
    /* #undef HAVE_OPENSSL_PEM_H */
    
    /* Define to 1 if you have the <openssl/pkcs12.h> header file. */
    /* #undef HAVE_OPENSSL_PKCS12_H */
    
    /* Define to 1 if you have the <openssl/rsa.h> header file. */
    /* #undef HAVE_OPENSSL_RSA_H */
    
    /* Define to 1 if you have the <openssl/ssl.h> header file. */
    /* #undef HAVE_OPENSSL_SSL_H */
    
    /* Define to 1 if you have the <openssl/x509.h> header file. */
    /* #undef HAVE_OPENSSL_X509_H */
    
    /* Define to 1 if you have the <pem.h> header file. */
    /* #undef HAVE_PEM_H */
    
    /* Define to 1 if you have the `perror' function. */
    #define HAVE_PERROR 1
    
    /* Define to 1 if you have the `pipe' function. */
    #define HAVE_PIPE 1
    
    /* if you have the function PK11_CreateGenericObject */
    /* #undef HAVE_PK11_CREATEGENERICOBJECT */
    
    /* Define to 1 if you have a working poll function. */
    #define HAVE_POLL 1
    
    /* If you have a fine poll */
    #define HAVE_POLL_FINE 1
    
    /* Define to 1 if you have the <poll.h> header file. */
    #define HAVE_POLL_H 1
    
    /* Define to 1 if you have a working POSIX-style strerror_r function. */
    #define HAVE_POSIX_STRERROR_R 1
    
    /* Define to 1 if you have the <pwd.h> header file. */
    #define HAVE_PWD_H 1
    
    /* Define to 1 if you have the `RAND_egd' function. */
    /* #undef HAVE_RAND_EGD */
    
    /* Define to 1 if you have the `RAND_screen' function. */
    /* #undef HAVE_RAND_SCREEN */
    
    /* Define to 1 if you have the `RAND_status' function. */
    /* #undef HAVE_RAND_STATUS */
    
    /* Define to 1 if you have the recv function. */
    #define HAVE_RECV 1
    
    /* Define to 1 if you have the recvfrom function. */
    #define HAVE_RECVFROM 1
    
    /* Define to 1 if you have the <rsa.h> header file. */
    /* #undef HAVE_RSA_H */
    
    /* Define to 1 if you have the select function. */
    #define HAVE_SELECT 1
    
    /* Define to 1 if you have the send function. */
    #define HAVE_SEND 1
    
    /* Define to 1 if you have the <setjmp.h> header file. */
    #define HAVE_SETJMP_H 1
    
    /* Define to 1 if you have the `setlocale' function. */
    #define HAVE_SETLOCALE 1
    
    /* Define to 1 if you have the `setmode' function. */
    /* #undef HAVE_SETMODE */
    
    /* Define to 1 if you have the `setrlimit' function. */
    #define HAVE_SETRLIMIT 1
    
    /* Define to 1 if you have the setsockopt function. */
    #define HAVE_SETSOCKOPT 1
    
    /* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
    /* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
    
    /* Define to 1 if you have the <sgtty.h> header file. */
    #define HAVE_SGTTY_H 1
    
    /* Define to 1 if you have the sigaction function. */
    #define HAVE_SIGACTION 1
    
    /* Define to 1 if you have the siginterrupt function. */
    #define HAVE_SIGINTERRUPT 1
    
    /* Define to 1 if you have the signal function. */
    /* #undef HAVE_SIGNAL */
    
    /* Define to 1 if you have the <signal.h> header file. */
    #define HAVE_SIGNAL_H 1
    
    /* Define to 1 if you have the sigsetjmp function or macro. */
    #define HAVE_SIGSETJMP 1
    
    /* Define to 1 if sig_atomic_t is an available typedef. */
    #define HAVE_SIG_ATOMIC_T 1
    
    /* Define to 1 if sig_atomic_t is already defined as volatile. */
    /* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
    
    /* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */
    /* #undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID */
    
    /* Define to 1 if you have the socket function. */
    #define HAVE_SOCKET 1
    
    /* Define to 1 if you have the <socket.h> header file. */
    /* #undef HAVE_SOCKET_H */
    
    /* Define this if you have the SPNEGO library fbopenssl */
    /* #undef HAVE_SPNEGO */
    
    /* Define to 1 if you have the `SSL_get_shutdown' function. */
    /* #undef HAVE_SSL_GET_SHUTDOWN */
    
    /* Define to 1 if you have the <ssl.h> header file. */
    /* #undef HAVE_SSL_H */
    
    /* Define to 1 if you have the <stdbool.h> header file. */
    #define HAVE_STDBOOL_H 1
    
    /* Define to 1 if you have the <stdint.h> header file. */
    #define HAVE_STDINT_H 1
    
    /* Define to 1 if you have the <stdio.h> header file. */
    #define HAVE_STDIO_H 1
    
    /* Define to 1 if you have the <stdlib.h> header file. */
    #define HAVE_STDLIB_H 1
    
    /* Define to 1 if you have the strcasecmp function. */
    #define HAVE_STRCASECMP 1
    
    /* Define to 1 if you have the strcasestr function. */
    #define HAVE_STRCASESTR 1
    
    /* Define to 1 if you have the strcmpi function. */
    /* #undef HAVE_STRCMPI */
    
    /* Define to 1 if you have the strdup function. */
    #define HAVE_STRDUP 1
    
    /* Define to 1 if you have the strerror_r function. */
    #define HAVE_STRERROR_R 1
    
    /* Define to 1 if you have the stricmp function. */
    /* #undef HAVE_STRICMP */
    
    /* Define to 1 if you have the <strings.h> header file. */
    #define HAVE_STRINGS_H 1
    
    /* Define to 1 if you have the <string.h> header file. */
    #define HAVE_STRING_H 1
    
    /* Define to 1 if you have the strlcat function. */
    #define HAVE_STRLCAT 1
    
    /* Define to 1 if you have the `strlcpy' function. */
    /* #undef HAVE_STRLCPY */
    
    /* Define to 1 if you have the strncasecmp function. */
    #define HAVE_STRNCASECMP 1
    
    /* Define to 1 if you have the strncmpi function. */
    /* #undef HAVE_STRNCMPI */
    
    /* Define to 1 if you have the strnicmp function. */
    /* #undef HAVE_STRNICMP */
    
    /* Define to 1 if you have the <stropts.h> header file. */
    /* #undef HAVE_STROPTS_H */
    
    /* Define to 1 if you have the strstr function. */
    #define HAVE_STRSTR 1
    
    /* Define to 1 if you have the strtok_r function. */
    #define HAVE_STRTOK_R 1
    
    /* Define to 1 if you have the strtoll function. */
    #define HAVE_STRTOLL 1
    
    /* if struct sockaddr_storage is defined */
    #define HAVE_STRUCT_SOCKADDR_STORAGE 1
    
    /* Define to 1 if you have the timeval struct. */
    #define HAVE_STRUCT_TIMEVAL 1
    
    /* Define to 1 if you have the <sys/filio.h> header file. */
    /* #undef HAVE_SYS_FILIO_H */
    
    /* Define to 1 if you have the <sys/ioctl.h> header file. */
    #define HAVE_SYS_IOCTL_H 1
    
    /* Define to 1 if you have the <sys/param.h> header file. */
    #define HAVE_SYS_PARAM_H 1
    
    /* Define to 1 if you have the <sys/poll.h> header file. */
    #define HAVE_SYS_POLL_H 1
    
    /* Define to 1 if you have the <sys/resource.h> header file. */
    #define HAVE_SYS_RESOURCE_H 1
    
    /* Define to 1 if you have the <sys/select.h> header file. */
    #define HAVE_SYS_SELECT_H 1
    
    /* Define to 1 if you have the <sys/socket.h> header file. */
    #define HAVE_SYS_SOCKET_H 1
    
    /* Define to 1 if you have the <sys/sockio.h> header file. */
    /* #undef HAVE_SYS_SOCKIO_H */
    
    /* Define to 1 if you have the <sys/stat.h> header file. */
    #define HAVE_SYS_STAT_H 1
    
    /* Define to 1 if you have the <sys/time.h> header file. */
    #define HAVE_SYS_TIME_H 1
    
    /* Define to 1 if you have the <sys/types.h> header file. */
    #define HAVE_SYS_TYPES_H 1
    
    /* Define to 1 if you have the <sys/uio.h> header file. */
    #define HAVE_SYS_UIO_H 1
    
    /* Define to 1 if you have the <sys/un.h> header file. */
    #define HAVE_SYS_UN_H 1
    
    /* Define to 1 if you have the <sys/utime.h> header file. */
    #define HAVE_SYS_UTIME_H 1
    
    /* Define to 1 if you have the <termios.h> header file. */
    #define HAVE_TERMIOS_H 1
    
    /* Define to 1 if you have the <termio.h> header file. */
    /* #undef HAVE_TERMIO_H */
    
    /* Define to 1 if you have the <time.h> header file. */
    #define HAVE_TIME_H 1
    
    /* Define to 1 if you have the <tld.h> header file. */
    /* #undef HAVE_TLD_H */
    
    /* Define to 1 if you have the `tld_strerror' function. */
    /* #undef HAVE_TLD_STRERROR */
    
    /* Define to 1 if you have the `uname' function. */
    #define HAVE_UNAME 1
    
    /* Define to 1 if you have the <unistd.h> header file. */
    #define HAVE_UNISTD_H 1
    
    /* Define to 1 if you have the `utime' function. */
    #define HAVE_UTIME 1
    
    /* Define to 1 if you have the <utime.h> header file. */
    #define HAVE_UTIME_H 1
    
    /* Define to 1 if compiler supports C99 variadic macro style. */
    #define HAVE_VARIADIC_MACROS_C99 1
    
    /* Define to 1 if compiler supports old gcc variadic macro style. */
    #define HAVE_VARIADIC_MACROS_GCC 1
    
    /* Define to 1 if you have the winber.h header file. */
    /* #undef HAVE_WINBER_H */
    
    /* Define to 1 if you have the windows.h header file. */
    /* #undef HAVE_WINDOWS_H */
    
    /* Define to 1 if you have the winldap.h header file. */
    /* #undef HAVE_WINLDAP_H */
    
    /* Define to 1 if you have the winsock2.h header file. */
    /* #undef HAVE_WINSOCK2_H */
    
    /* Define to 1 if you have the winsock.h header file. */
    /* #undef HAVE_WINSOCK_H */
    
    /* Define this symbol if your OS supports changing the contents of argv */
    /* #undef HAVE_WRITABLE_ARGV */
    
    /* Define to 1 if you have the writev function. */
    #define HAVE_WRITEV 1
    
    /* Define to 1 if you have the ws2tcpip.h header file. */
    /* #undef HAVE_WS2TCPIP_H */
    
    /* Define to 1 if you have the <x509.h> header file. */
    /* #undef HAVE_X509_H */
    
    /* if you have the zlib.h header file */
    /* #undef HAVE_ZLIB_H */
    
    /* Define to the sub-directory in which libtool stores uninstalled libraries.
       */
    #define LT_OBJDIR ".libs/"
    
    /* Define to 1 if you are building a native Windows target. */
    /* #undef NATIVE_WINDOWS */
    
    /* Define to 1 if you need the lber.h header file even with ldap.h */
    /* #undef NEED_LBER_H */
    
    /* Define to 1 if you need the malloc.h header file even with stdlib.h */
    /* #undef NEED_MALLOC_H */
    
    /* Define to 1 if you need the memory.h header file even with stdlib.h */
    /* #undef NEED_MEMORY_H */
    
    /* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
    /* #undef NEED_REENTRANT */
    
    /* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
    /* #undef NEED_THREAD_SAFE */
    
    /* cpu-machine-OS */
    #define OS "arm-unknown-linux-gnu"
    
    /* Name of package */
    #define PACKAGE "curl"
    
    /* Define to the address where bug reports for this package should be sent. */
    #define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"
    
    /* Define to the full name of this package. */
    #define PACKAGE_NAME "curl"
    
    /* Define to the full name and version of this package. */
    #define PACKAGE_STRING "curl -"
    
    /* Define to the one symbol short name of this package. */
    #define PACKAGE_TARNAME "curl"
    
    /* Define to the home page for this package. */
    /* #undef PACKAGE_URL */
    
    /* Define to the version of this package. */
    #define PACKAGE_VERSION "-"
    
    /* a suitable file to read random data from */
    /* #undef RANDOM_FILE */
    
    /* Define to the type of arg 1 for recvfrom. */
    /* #undef RECVFROM_TYPE_ARG1 */
    
    /* Define to the type pointed by arg 2 for recvfrom. */
    /* #undef RECVFROM_TYPE_ARG2 */
    
    /* Define to 1 if the type pointed by arg 2 for recvfrom is void. */
    /* #undef RECVFROM_TYPE_ARG2_IS_VOID */
    
    /* Define to the type of arg 3 for recvfrom. */
    /* #undef RECVFROM_TYPE_ARG3 */
    
    /* Define to the type of arg 4 for recvfrom. */
    /* #undef RECVFROM_TYPE_ARG4 */
    
    /* Define to the type pointed by arg 5 for recvfrom. */
    /* #undef RECVFROM_TYPE_ARG5 */
    
    /* Define to 1 if the type pointed by arg 5 for recvfrom is void. */
    /* #undef RECVFROM_TYPE_ARG5_IS_VOID */
    
    /* Define to the type pointed by arg 6 for recvfrom. */
    /* #undef RECVFROM_TYPE_ARG6 */
    
    /* Define to 1 if the type pointed by arg 6 for recvfrom is void. */
    /* #undef RECVFROM_TYPE_ARG6_IS_VOID */
    
    /* Define to the function return type for recvfrom. */
    /* #undef RECVFROM_TYPE_RETV */
    
    /* Define to the type of arg 1 for recv. */
    #define RECV_TYPE_ARG1 int
    
    /* Define to the type of arg 2 for recv. */
    #define RECV_TYPE_ARG2 void *
    
    /* Define to the type of arg 3 for recv. */
    #define RECV_TYPE_ARG3 size_t
    
    /* Define to the type of arg 4 for recv. */
    #define RECV_TYPE_ARG4 unsigned int
    
    /* Define to the function return type for recv. */
    #define RECV_TYPE_RETV ssize_t
    
    /* Define as the return type of signal handlers (`int' or `void'). */
    #define RETSIGTYPE void
    
    /* Define to the type qualifier of arg 5 for select. */
    #define SELECT_QUAL_ARG5 
    
    /* Define to the type of arg 1 for select. */
    #define SELECT_TYPE_ARG1 int
    
    /* Define to the type of args 2, 3 and 4 for select. */
    #define SELECT_TYPE_ARG234 fd_set *
    
    /* Define to the type of arg 5 for select. */
    #define SELECT_TYPE_ARG5 struct timeval *
    
    /* Define to the function return type for select. */
    #define SELECT_TYPE_RETV int
    
    /* Define to the type qualifier of arg 2 for send. */
    #define SEND_QUAL_ARG2 const
    
    /* Define to the type of arg 1 for send. */
    #define SEND_TYPE_ARG1 int
    
    /* Define to the type of arg 2 for send. */
    #define SEND_TYPE_ARG2 void *
    
    /* Define to the type of arg 3 for send. */
    #define SEND_TYPE_ARG3 size_t
    
    /* Define to the type of arg 4 for send. */
    #define SEND_TYPE_ARG4 unsigned int
    
    /* Define to the function return type for send. */
    #define SEND_TYPE_RETV ssize_t
    
    /* The size of `int', as computed by sizeof. */
    #define SIZEOF_INT 4
    
    /* The size of `long', as computed by sizeof. */
    #define SIZEOF_LONG 4
    
    /* The size of `off_t', as computed by sizeof. */
    #define SIZEOF_OFF_T 4
    
    /* The size of `short', as computed by sizeof. */
    #define SIZEOF_SHORT 2
    
    /* The size of `size_t', as computed by sizeof. */
    #define SIZEOF_SIZE_T 4
    
    /* The size of `time_t', as computed by sizeof. */
    #define SIZEOF_TIME_T 4
    
    /* The size of `void*', as computed by sizeof. */
    #define SIZEOF_VOIDP 4
    
    /* Define to 1 if you have the ANSI C header files. */
    #define STDC_HEADERS 1
    
    /* Define to the type of arg 3 for strerror_r. */
    #define STRERROR_R_TYPE_ARG3 size_t
    
    /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
    #define TIME_WITH_SYS_TIME 1
    
    /* Define to enable c-ares support */
    /* #undef USE_ARES */
    
    /* Define to disable non-blocking sockets. */
    /* #undef USE_BLOCKING_SOCKETS */
    
    /* if GnuTLS is enabled */
    /* #undef USE_GNUTLS */
    
    /* if libSSH2 is in use */
    /* #undef USE_LIBSSH2 */
    
    /* If you want to build curl with the built-in manual */
    /* #undef USE_MANUAL */
    
    /* if NSS is enabled */
    /* #undef USE_NSS */
    
    /* if OpenSSL is in use */
    /* #undef USE_OPENSSL */
    
    /* if SSL is enabled */
    /* #undef USE_SSLEAY */
    
    /* Define to 1 if you are building a Windows target without large file
       support. */
    /* #undef USE_WIN32_LARGE_FILES */
    
    /* to enable SSPI support */
    /* #undef USE_WINDOWS_SSPI */
    
    /* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
    /* #undef USE_YASSLEMUL */
    
    /* Version number of package */
    #define VERSION "7.20.1"
    
    /* Define to avoid automatic inclusion of winsock.h */
    /* #undef WIN32_LEAN_AND_MEAN */
    
    /* Define to 1 if OS is AIX. */
    #ifndef _ALL_SOURCE
    /* #  undef _ALL_SOURCE */
    #endif
    
    /* Number of bits in a file offset, on hosts where this is settable. */
    /* #undef _FILE_OFFSET_BITS */
    
    /* Define for large files, on AIX-style hosts. */
    /* #undef _LARGE_FILES */
    
    /* Define to empty if `const' does not conform to ANSI C. */
    /* #undef const */
    
    /* Type to use in place of in_addr_t when system does not provide it. */
    /* #undef in_addr_t */
    
    /* Define to `__inline__' or `__inline' if that's what the C compiler
       calls it, or to nothing if 'inline' is not supported under any name.  */
    #ifndef __cplusplus
    /* #undef inline */
    #endif
    
    /* Define to `unsigned int' if <sys/types.h> does not define. */
    /* #undef size_t */
    
    /* the signed version of size_t */
    /* #undef ssize_t */

    三、编写NDK文件调用curl访问网络

    \apps\curljni\project\jni\目录下建立文件curljni.c  

      // 调试      LOGI("  %d", len);
    #include<android/log.h>  
    #define LOG_TAG "debug"
    #define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, fmt, ##args)
    #define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, fmt, ##args)
    #define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, fmt, ##args)
    
    #include <jni.h>    
    #include <string.h>
    #include "curl/curl.h" 
     
      
    //回调函数中自定义参数的类型
    struct FtpFile {
      const char *filename;
      FILE *stream;
    };
    
    //回调函数获取数据
    static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
    {
      LOGI("buffersize %d",size*nmemb); 
      struct FtpFile *out=(struct FtpFile *)stream;
      if(out && !out->stream) {
        /* open file for writing */
        out->stream=fopen(out->filename, "wb");
        if(!out->stream)
        {        
            LOGI("failure, can't open file to write\n");   
            return -1; /* failure, can't open file to write */
        }
      }
      return fwrite(buffer, size, nmemb, out->stream);
    } 
    
    
    JNIEXPORT jstring JNICALL
    Java_com_example_curltest_MainActivity_GetImage( JNIEnv* env, 
                                                      jobject thiz, jstring imageurl,jstring savepath) 
    {  
      CURL *curl; 
      CURLcode res;  
    
      const jbyte *weburl;
      weburl = (*env)->GetStringUTFChars(env, imageurl, NULL);
      if (weburl == NULL) {
          return NULL;  
      }
    
      struct FtpFile ftpfile={
       (*env)->GetStringUTFChars(env, savepath, NULL), /* name to store the file as if succesful */
        NULL
      };
     
      //初始化 curl_global_init可以不设置
      curl_global_init(CURL_GLOBAL_DEFAULT);
      curl = curl_easy_init(); 
      if(curl) { 
        curl_easy_setopt(curl, CURLOPT_URL, weburl); // 设置访问链接
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite); // 设置回调函数
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); //设置回调参数(在回调函数内可以调用)
        res = curl_easy_perform(curl); //执行获得curl返回参数用于判断成功与否
            /* always cleanup */ 
        curl_easy_cleanup(curl); 
        (*env)->ReleaseStringUTFChars(env, imageurl, weburl);
        
       if(ftpfile.stream)
       fclose(ftpfile.stream); /* close the local file */
     //清理 curl
       curl_global_cleanup(); 
     
    
        if(CURLE_OK != res) { 
                //失败
            LOGI("curl told us %d\n", res);   
            return (*env)->NewStringUTF(env, "failed");
        }
        else
        {
            //成功
            LOGI("succesful\n");   
            return (*env)->NewStringUTF(env, "succesful");
        }
       }
    
       return (*env)->NewStringUTF(env, "failed");
    }  
      

    四、创建应用配置文件Application.mk,Android.mk。

     curljni目录下建立文件Application.mk。内容如下:

    APP_PROJECT_PATH := $(call my-dir)/project
    APP_MODULES := curljni libcurl

     在curljni\project\jni目录下建立文件Android.mk。内容如下:

    LOCAL_PATH:= $(call my-dir)
    
    CFLAGS := -Wpointer-arith -Wwrite-strings -Wunused -Winline \
     -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long \
     -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral \
     -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement \
     -Wno-system-headers -DHAVE_CONFIG_H
    
    include $(CLEAR_VARS)
    include $(LOCAL_PATH)/curl/lib/Makefile.inc
    
    
    LOCAL_SRC_FILES := $(addprefix curl/lib/,$(CSOURCES))
    LOCAL_CFLAGS += $(CFLAGS)
    LOCAL_C_INCLUDES += $(LOCAL_PATH)/curl/include/ $(LOCAL_PATH)/curl/lib
    
    LOCAL_COPY_HEADERS_TO := libcurl
    LOCAL_COPY_HEADERS := $(addprefix curl/include/curl/,$(HHEADERS))
    
    LOCAL_MODULE:= libcurl
    
    include $(BUILD_STATIC_LIBRARY)
    
    # Build shared library now
    # curltest
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := curljni
    LOCAL_SRC_FILES := curljni.c
    LOCAL_STATIC_LIBRARIES := libcurl
    LOCAL_C_INCLUDES += $(LOCAL_PATH)/curl/include $(LOCAL_PATH)/curl/lib
    
    #  调试用
    LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog  
    
    include $(BUILD_SHARED_LIBRARY) 

    五、编译生成so库并测试

      cd到NDK安装目录下执行一下命令生成so文件 

    make APP=curljni -B

        在android项目中添加 

     public native String GetImage(String url,String savepath); 
      static { 
        System.loadLibrary("curljni"); 
      }

        然后在需要的地方调用GetImage(url,path)进行执行;

      这样在path中就可以看到从url保存下来的图片了

  • 相关阅读:
    Java 抽象类
    7.队列的链表实现
    6.队列的数组实现
    5.栈的链表实现
    4.栈的数组实现
    3.线性表-cursor
    2.线性表-Linked list
    1.线性表-Array
    hello world!
    boost 大小端转换
  • 原文地址:https://www.cnblogs.com/stratrail/p/3016663.html
Copyright © 2011-2022 走看看