与 Android NDK 建立 HTTP 连接的方法如下:
在 C++ 中,可以使用一些现成的 HTTP 库来进行 HTTP 连接。其中比较流行的库有 libcurl 和 cpr。这些库可以轻松地在 Android NDK 中使用。
例如,使用 libcurl:
#include <curl/curl.h>
int main() {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
如果不想使用第三方库,可以通过 JNI(Java Native Interface)调用 Java 代码来进行 HTTP 连接。在 Java 中,可以使用 HttpURLConnection 或者 OkHttp 等库来进行 HTTP 连接。
例如,使用 HttpURLConnection:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpHelper {
public static String httpGet(String urlStr) throws Exception {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
StringBuilder response = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
}
}
然后在 C++ 中调用该 Java 代码:
#include <jni.h>
#include<string>
JNIEnv *env;
jobject jobj;
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_ndk_1http_MainActivity_stringFromJNI(JNIEnv *env, jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
extern "C" JNIEXPORT void JNICALL
Java_com_example_ndk_1http_MainActivity_makeHttpRequest(JNIEnv *env, jobject /* this */, jstring url) {
jclass cls = env->FindClass("com/example/ndk_http/HttpHelper");
jmethodID mid = env->GetStaticMethodID(cls, "httpGet", "(Ljava/lang/String;)Ljava/lang/String;");
jstring result = (jstring) env->CallStaticObjectMethod(cls, mid, url);
env->DeleteLocalRef(cls);
env->DeleteLocalRef(result);
}
这样就可以在 Android NDK 中通过 JNI 调用 Java 代码来进行 HTTP 连接了。
领取专属 10元无门槛券
手把手带您无忧上云