在Android中C++和Java之间的通信

4
我希望在Android的本地代码中从C++文件调用Java方法。我知道可以通过JNI实现这一点,但在这种情况下,我需要从Java中启动调用,这不符合我的要求。
我需要从C++的main()函数中调用Java中编写的方法。
那么有没有其他方法可以在不使用JNI的情况下实现这一点?
如果可以使用JNI精确实现此事,请告诉我如何操作?
提前感谢您。
谢谢, Maulik
2个回答

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++中调用:
在Android中从C++调用Java方法。应该有助于你的代码:

#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);
}

我已经检查过了,但问题是它们使用JNI来调用C到JAVA和反之亦然,在JNI中我们需要首先在Java中初始化调用,然后才能从C到JAVA进行调用。 我想要的是在不在JAVA中初始化的情况下从C到JAVA进行调用。 - MMJ

1
为此,您可以创建一个带有服务器套接字的Android服务。您还可以创建实现客户端套接字的C ++应用程序。
C++应用程序(客户端套接字)<----> Android服务(服务器套接字)
通过这种方式,您还可以从C++应用程序和Android应用程序/服务中实现请求/响应机制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接