0.引进头文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include<jni.h>
#include"platform/android/jni/JniHelper.h" //引不到JniHelper.h
#include "JniHelper.h" //编译不能通过
#include<android/log.h>
#endif
1.传递两参数 string类型并且返回一个 string类型
包名org/play/test/、类名CaddCall
void HelloWorld::menuCloseCallback(CCObject* pSender) { bool isHave; const char* msgRet; JniMethodInfo minfo; const char* fileName = "testWei"; //产品id const char* imageName = "testWei"; //包名org/play/test/、类名CaddCall isHave = JniHelper::getStaticMethodInfo(minfo, "org/play/test/CaddCall", "googlePlay", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"); if (isHave) { jstring jTitle = minfo.env->NewStringUTF(fileName); jstring jTitle1 = minfo.env->NewStringUTF(imageName); jobject obj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID, jTitle, jTitle1); jstring jRet = (jstring) obj; msgRet = (minfo.env)->GetStringUTFChars(jRet, NULL); } if (std::string(msgRet) == "1") CCMessageBox("1", "1"); else CCMessageBox("0", "0"); }
启动类:继承extends Cocos2dxActivity的类
(1)通过单例的static方法访问,启动类的非static方法
类CaddCall
CaddCall.acty:CaddCall类public static APlay acty; 在xxx类onCreat...时候 CaddCall.acty = this;这个时候在static方法中就能调用xxx类的非static方法了
public static String googlePlay(final String protuctId, String imagePath) { CaddCall.acty.onBuyGasButtonClicked(); return CaddCall.retResult; }
注:通过这种方法也解决了,c++通过jni调用java的非static方法
(2)通过通知(Handler)访问,启动类的非static方法
启动类
public Handler mHandler = new Handler() {//注册通知 public void handleMessage(Message msg) {//等待对方相应这个通知 switch (msg.what) { case CaddCall.SHOW_DIALOG://通知名字 onBuyGasButtonClicked(); //调用非static方法 break; } } };
publicstatic XXX启动类 acty;
在启动类的onCreate 调用 CaddCall.acty = this(告诉CaddCall里的发送通知的方法,给那个类发送通知);
public static final int SHOW_DIALOG = 0x0001; public static APlay acty; private static Handler mHandler;//通知 public static void init(Handler handler) { CaddCall.mHandler = handler; }
public static String googlePlay(final String protuctId, String imagePath) { Message msg = mHandler.obtainMessage();//得到消息 msg.what = CaddCall.SHOW_DIALOG;//得到消息线路 msg.sendToTarget();//发送 return “”; }
相关推荐
标题 "CPP调用JAVA函数Demo" 涉及的核心技术是C++(CPP)与Java(JAVA)之间的互操作性,这通常通过Java Native Interface(JNI)实现。JNI是Java平台标准的一部分,允许Java代码和其他语言写的代码进行交互。在这个...
本文将详细讲解如何在QT项目中调用JAVA文件,以实现与Android原生系统的交互。 首先,我们需要了解QT的QAndroidJniObject类,它是QT为与Android Java层交互提供的一种工具。QAndroidJniObject允许我们在C++代码中...
描述:JNI 调用 c++ 互相调用实例,java JNI cpp 互相调用实例 本描述进一步强调了本文的主要内容,即通过 JNI 技术实现 Java 和 C++ 之间的互相调用操作。 标签:java JNI cpp 互相调用实例 本标签对应了本文的...
- `Sample2.c`和`Sample2.cpp`: 这两个文件可能是C++实现的部分,其中包含了使用JNI调用Java方法的代码。通常会包含JNI头文件,定义本地方法,以及调用Java类和方法的逻辑。 - `Sample2.class`: 这是Java编译后的...
本文将深入探讨如何在Delphi 10.3中利用JNI(Java Native Interface)技术来调用Java的函数,实现两者之间的交互。 JNI是Java平台的一部分,它为Java代码与其他语言编写的代码提供了一个标准接口。通过JNI,开发者...
JNI是Java与本地代码之间沟通的桥梁,使得Java应用程序能够调用本地库中的方法,同时也支持从本地代码调用Java方法。 #### 二、Java调用C/C++ ##### 1. 制作DLL文件 **第一步:** 创建一个C/C++ DLL文件,通常是...
### c++调用java工程:深入理解JNI技术 在现代软件开发中,多语言混合编程已成为常态,特别是在大型项目中,不同的编程语言被用于解决各自领域的问题,以达到最佳的性能和开发效率。C++与Java,作为两种广泛使用的...
然而,有时我们需要利用Android独有的功能,比如访问系统API或使用已有的Java库,这时就需要在Qt中调用Java代码。本文将详细探讨如何在Qt for Android环境中实现Java与C++的交互。 首先,理解Qt与Java交互的基本...
文件"C++ call java.doc"可能是包含详细步骤、示例代码或者作者的封装方法的文档,而"jni_cpp"可能是一个包含C++源代码的文件夹,这些代码展示了如何使用JNI来调用Java函数。 在实际使用中,C++调用Java的过程通常...
首先,`testjni.cpp`是C++源文件,它包含了调用Java类的JNI函数。编写这样的源文件时,我们需要导入JNI头文件,并使用JNI提供的API来创建和操作Java对象,调用其方法。例如,`FindClass`用于查找Java类,`...
创建`native-lib.cpp`文件,这里我们将实现C++调用Java的方法。首先,我们需要声明Java方法的本地方法ID,然后使用JNIEnv接口调用Java方法: ```cpp #include #include extern "C" JNIEXPORT jstring JNICALL ...
这里通常包括了对Java对象的访问,调用Java方法,以及执行特定的C/C++逻辑。 5. **编译C/C++代码**:使用合适的编译器(如GCC或Clang)将C/C++源文件编译为动态链接库。对于Android开发,这通常涉及到使用Android ...
这个主题涵盖了Java应用程序如何利用本地方法(通常由C或C++编写)来扩展其功能,以及C/C++如何调用Java对象和方法。 首先,我们需要理解JNI的基本概念。JNI为Java程序员提供了一个接口,让他们可以定义本地方法,...
Cpp运行Java的class文件,可以编译,运行需要jvm.dll 可以去掉Qt的依赖jint create_vm(JavaVM** jvm, JNIEnv** env) { JavaVMInitArgs args; JavaVMOption options[1]; args.version = JNI_VERSION_1_6; args....
在本文中,我们将深入探讨如何在Visual Studio 2019环境下使用C++通过Java Native Interface (JNI)来调用Java代码。JNI是Java平台的一部分,它为Java应用程序提供了与本地代码交互的能力,使得开发者可以将Java应用...
本教程将详细探讨如何使用C++通过JNI(Java Native Interface)来调用Java接口。JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。下面,我们将深入讲解这个过程,并结合实际例子“CInvokJava...
本篇文章将详细探讨如何在NDK开发中,从C/C++代码调用Java层的方法。 首先,我们需要了解Java本地接口(JNI),它是Java平台标准版的一部分,提供了与Java虚拟机(JVM)交互的能力,包括在Java代码中调用C/C++函数...
JNI实现java cpp相互调用,包括动态注册和静态注册两种方式,具体包含 静态方式实现: C/C++中访问Java方法 C/C++中访问Java父类的方法 C/C++中访问/修改Java变量 Java中访问C/C++方法 Java中访问/修改C/C++变量 ...
本示例将讲解如何在Android Studio 2.3.3版本下,通过C语言调用Java方法。 首先,理解JNI的基本结构。在Java端,我们需要定义一个本地方法,即使用`native`关键字声明的方法。例如: ```java public class ...