android中C ++与Java之间的通信

时间:2015-09-14 17:00:54

标签: android java-native-interface

我想在Android中使用本机代码中的C ++文件调用java方法。我知道,我们可以从JNI实现这一点,但在这种情况下,我需要从Java发起调用,这不符合我的要求。

我需要在C ++中调用main()函数用Java编写的方法。

在没有JNI的情况下,还有其他方法可以实现这一目标吗?

如果我能用JNI完成这件事,请告诉我怎么做?

提前致谢。

谢谢你, Maulik

2 个答案:

答案 0 :(得分:2)

你检查过这个:
https://developer.android.com/ndk/samples/sample_hellojni.html 我基本上是从那里学到的。 或者:
1. https://github.com/sureshjoshi/android-ndk-swig-example
2. https://github.com/googlesamples/android-ndk
一个简单的搜索就可以让你进入所有这些地方。
修改 现在,一旦你完成了这个并且接下来就可以正常使用C / C ++:
Calling a java method from c++ in Android。该 应该帮助你的片段是:

#include <string.h>
#include <jni.h>
//other imports

jstring get_package_MainActivity_getJniString( JNIEnv* env, jobject obj){

    jstring jstr = (*env)->NewStringUTF(env, "MainActivity class");
    jclass clazz = (*env)->FindClass(env, "com/org/android/ui/activities/MainActivity");
    jmethodID mCurrentActivityId = (*env)->GetMethodID(env, clazz, "getCurrentActivityName", "(Ljava/lang/String;)Ljava/lang/String;");
    jobject result = (*env)->CallObjectMethod(env, obj, mCurrentActivityId, jstr);

    const char* str = (*env)->GetStringUTFChars(env,(jstring) result, NULL); // should be released but what a heck, it's a tutorial :)
    printf("%s\n", str);

    return (*env)->NewStringUTF(env, str);
}

答案 1 :(得分:1)

为此,您可以使用服务器套接字创建Android服务。您可以创建正在实现客户端套接字的C ++应用程序。

C ++ App(客户端套接字)<----> Android服务(服务器套接字)

通过这种方式,您还可以从C ++应用和Android应用/服务中实现请求/响应机制。