Android JNI c/c++调用java 无需新建虚拟机

近期通过研究SDL源码 得出android JNI  c/c++调用java 无需新建虚拟机: 具体步骤如下

第一步获得:两个参数 JNIEnv和jclass

void Java_com_Test_Audio_Init( JNIEnv* env,jclass cls, jobject thiz )
{
  InitJNI(env,cls);
}
bool InitJNI(JNIEnv* env,jclass cls)
{
  m_Env=env;
  m_cls=cls;
}

第二步

获得java那边定义的函数的名字

第三步 传递参数调用java 函数

char *str="god_is_a_girl.mp3";
char str[]="nihao";
 jbyte *by = (jbyte*)str;
 jbyteArray jarray = m_Env->NewByteArray(strlen(str));
 m_Env->SetByteArrayRegion(jarray, 0, strlen(str), by);
///调用java函数
 m_Env->CallStaticBooleanMethod(m_cls, midCreateGLContext,jarray);

原文地址:https://www.cnblogs.com/zhujiabin/p/10605524.html

时间: 2024-07-28 13:01:06

Android JNI c/c++调用java 无需新建虚拟机的相关文章

六、Android学习笔记_JNI_c调用java代码

1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // C调用java空方法 public void helloFromJava() { System.out.println("hello from java"); } // C调用java中的带两个int参数的方法 public int Add(int x, int y) { int res

Android学习笔记_JNI_c调用java代码

1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // C调用java空方法 public void helloFromJava() { System.out.println("hello from java"); } // C调用java中的带两个int参数的方法 public int Add(int x, int y) { int res

cocos2d-x笔记5: 通过jni实现C++调用Java

Cocos2d-x的跨平台性很强大,但是偶尔也需要平台的原生API结合. C++在Win32平台下简单的很,C++可以直接用MFC或者调用Win32API. Ios在XCode下直接就能C++和OC混编. 而Android又一次悲剧了,C++既不是Android的原生语言,也没有IDE可以混编... 我们只好通过jni来搞. Cocos2d-x 给我们提供了JniHelper类(良心!).头文件 #include "platform/android/jni/JniHelper.h".通

JNI中C调用Java方法

背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT void JNICALL Java_cn_itcast_ndkcallback_DataProvider_callmethod1 (JNIEnv * env, jobject obj){ //在c代码里面调用java代码里面的方法 // java 反射 //1 . 找到java代码的 class文件

JNI由浅入深_7_c调用Java方法一

1.在Java中声明方法 <span style="font-size:14px;">/** * javah -encoding utf-8 -jni com.example.jniandroid.service.CFunction * 当java中有中文时,会报编码GBK不可映射字符 方法的调用,加上-encoding utf-8 * * @author libin * */ public class CFunction { /** * 实现在c里面回调callback方

Music Studio项目心得--JNI实现C++调用JAVA

这个项目是我參加内蒙古挑战杯的比赛项目,因为时间关系,我没时间实现OpenOMR开源项目由JAVA全然向C++的转换,经过我半个多月的尝试,我将OpenOMR中的1/3的代码改写成C++,只是非常快我就发现,假设依照这个进度,我是不管怎样也无法按时完毕工作了,更重要的是Joone人工智能库的算法要是全然移植不是我一个大二学生可以在这么短的时间做到的,于是我放弃JAVA转C++的解决方. 取而代之的是,我使用JAVA做算法的核心,这样就能够用最小的代价高速完毕项目,而用C++去调用JAVA的方法,

【转】 Android的NDK开发(1)————Android JNI简介与调用流程

原文网址:http://blog.csdn.net/conowen/article/details/7521340 ******************************************************************************************** * author:[email protected]大钟                                                                      

Android JNI入门第二篇——Java参数类型与本地参数类型对照

前面一篇通过简单的例子介绍了android中JNI的使用.这一篇从基础上了解一些Java参数类型与本地参数类型区别. 1)        java中的返回值void和JNI中的void是完全对应的哦!(仅仅一个而已). 2)        java中的基本数据类型(byte ,short ,int,long,float,double ,boolean,char-8种)在JNI中对应的数据类型只要在前面加上j就对应了(jbyte ,jshort ,jint,jlong,jfloat,jdouble

jni中调用java方法获取当前apk的签名文件md5值

相应的java方法: void getsign(Context context) throws Exception { PackageInfo localPackageInfo = context.getPackageManager() .getPackageInfo(context.getPackageName(), 64); StringBuilder localStringBuilder = new StringBuilder(); Signature[] arrayOfSignature