如何将http C库正确包含到Android项目中()

实践是知识的母亲,知识是生活的明灯。这篇文章主要讲述如何将http C库正确包含到Android项目中?相关的知识,希望能为你提供帮助。
我正在制作一个android项目,我正在尝试使用HTTPS向服务器发布帖子请求。要发布帖子请求,我需要使用JNI,所以我需要在C中实现它。 我的想法是使用一个我可以包含在我的项目中的库,就像我使用minizip library here一样。
我发现这个库here在我看来很光,可以服务于我的目的。我包含在文件夹c中,因为您还可以在下面看到文件ca_cert.hhttps.chttps.h以及文件夹mbedtls,与github项目中的文件完全相同。

├── app.iml ├── build.gradle ├── CMakeLists.txt └── src ├── androidTest │└── java │└── etc ├── main │├── AndroidManifest.xml │├── c ││├── ca_cert.h ││├── https.c ││├── https.h ││├── mbedtls │││├── etc ││├── native-lib.c ││├── pathfinder.c ││├── pathfinder.h ││├── post_data.c ││├── post_data.h ││├── third │├── java ││└── etc │└── res │├── etc └── test └── java └── etc

正如您在上面的树结构中看到的,我在根目录中有一个CMakeLists.txt,在src/main/c/中,您将看到我从提到的https库中获取的文件和文件夹。
CMakeLists.txt的内容如下
cmake_minimum_required(VERSION 3.4.1)add_library(# Sets the name of the library. native-lib# Sets the library as a shared library. SHARED# Provides a relative path to your source file(s). src/main/c/native-lib.c src/main/c/ca_cert.h src/main/c/https.h )include_directories(native-lib SHARED src/main/c/mbedtls/include)#add_definitions(-DHAVE_ZLIB) find_library( PRE_BUILD_ANDROID_LIB android) find_library( log-lib log) find_library(z-lib z)target_link_libraries( native-lib${PRE_BUILD_ANDROID_LIB} ${log-lib} ${z-lib} )

当我尝试运行如下的简单示例时,我确实错过了一些东西
JNIEXPORT jint JNICALL Java_example_example_do_post( JNIEnv *env, jobjectthis ) {NSV_LOGE("post_data starts "); char *url; char data[1024], response[4096]; inti, ret, size; HTTP_INFO hi1, hi2; // Init http session. verify: check the server CA cert. http_init(& hi1, FALSE); http_init(& hi2, TRUE); url = "http://httpbin.org/get?message=https_client"; ret = http_get(& hi1, url, response, sizeof(response)); return 0; }

我明白了
../../../../src/main/c/native-lib.c:56: error: undefined reference to 'http_init' ../../../../src/main/c/native-lib.c:57: error: undefined reference to 'http_init' ../../../../src/main/c/native-lib.c:61: error: undefined reference to 'http_get' clang: error: linker command failed with exit code 1 (use -v to see invocation)

答案更换
src/main/c/ca_cert.h src/main/c/https.h


src/main/c/https.c

【如何将http C库正确包含到Android项目中()】CMakeLists.txt

    推荐阅读