实践是知识的母亲,知识是生活的明灯。这篇文章主要讲述如何将http C库正确包含到Android项目中?相关的知识,希望能为你提供帮助。
我正在制作一个android项目,我正在尝试使用HTTPS向服务器发布帖子请求。要发布帖子请求,我需要使用JNI,所以我需要在C
中实现它。
我的想法是使用一个我可以包含在我的项目中的库,就像我使用minizip library here一样。
我发现这个库here在我看来很光,可以服务于我的目的。我包含在文件夹c
中,因为您还可以在下面看到文件ca_cert.h
,https.c
和https.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
。推荐阅读
- 使用Android Studio调试C ++库
- 如何调查随机Android原生函数调用错误()
- 从Android Activity onCreate方法调用QCoreApplication方法
- 如何使用/合并CPP文件到Android项目()
- Android JNI - 调用AttachCurrentThread而不使用DetachCurrentThread
- 如何加载android系统本机库
- 使用Android NDK将文件写入SDcard以外的位置()
- Xamarin.Android Java绑定库运行时失败访问本机库
- 如何在tid xxxxx(Thread-X)中解决Android致命信号11(SIGSEGV),代码1,故障地址0x0()