安卓系统中C++和Java之间的通信

 2023-01-20    242  

问题描述

我想在Android中的本机代码中调用C ++文件的Java方法.我知道,我们可以从JNI实现这一目标,但是在那种情况下,我需要启动Java的电话,这将不符合我的要求.

我需要调用从c ++中的main()函数中写入Java的方法.

安卓系统中C++和Java之间的通信

因此,如果没有JNI?

,还有其他方法可以实现这一目标吗?

如果我可以使用JNI确切地实现这一目标,请让我知道如何?

预先感谢.

谢谢,
maulik

推荐答案

您是否检查了以下内容:
https://develiper.android.com.android.com/ndk/samples/samples/sampamples/sample_hellojhellojni.hllletldlety/a >
我基本上从那里学到了.
或:
1. https://github.com/sureshjoshi/sureshjoshi/android-ndroid-ndk-swig-swig-example/a>.
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);
}

其他推荐答案

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

C ++应用(客户端套接字) Android Service(Server套接字)

通过这种方式,您也可以从C ++应用程序和Android应用程序/服务实现请求/响应机制.

以上所述是小编给大家介绍的安卓系统中C++和Java之间的通信,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26117.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。