Android JNI c/c++调用java的实例

Android JNI c/c++调用java的实例

近期通过研究SDL源码 得出Android JNI  c/c++调用Java 无需新建虚拟机,这样省去很多步骤,这样调用Android JNI会变得非常容易,大家看下简单实例:

具体步骤如下

第一步获得:两个参数 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那边定义的函数的名字

jmethodID midCreateGLContext = env->GetStaticMethodID(cls,"Test_Audio","([B)Z"); midCreateGLContext = m_Env->GetStaticMethodID(m_cls,"Test_Audio","([B)Z"); midInitSound=m_Env->GetStaticMethodID(m_cls,"init","()V"); midLoadSound=m_Env->GetStaticMethodID(m_cls,"load","(Ljava/lang/String;I)V"); midLoadMedia=m_Env->GetStaticMethodID(m_cls,"load","(Ljava/lang/String;)V");

ava类型      对应的签名 boolean Z byte B char C shrot S int I long L float F double D void V Object L用/分割包的完整类名;  Ljava/lang/String; Array [签名       [I       [Ljava/lang/String;

第三步 传递参数调用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);

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-07-28 15:54:13

Android JNI c/c++调用java的实例的相关文章

Android jni调试打印char阵列的实例详解

Android jni调试打印char阵列的实例详解 前言: 在android开发中,用jni有时候需要打印某一个字符串的二进制格式输出,比较友好的输出格式是一个四列,八列,十六列的矩阵格式.类似在错误删除野指针时出现如下错误: pid: 2721, tid: 3005, name: pool-5-thread-5 >>> onxmaps.hunt <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr dea

android JNI调用SDK底层C方法

问题描述 android JNI调用SDK底层C方法 如题:因为上层没法去找到方法,只有想办法去调底层C的方法,SDK源码make出来的.so库文件可以用来做jni的调用么? 底层.c文件里面没有申明JNI,我需要如何去申明 解决方案 你这几个函数的参数,返回值都比较简单,按照JNI的规则,封装导出一下,然后就可以java来调用了 http://www.cnblogs.com/anyanran/archive/2010/11/22/ndk1.html 解决方案二: http://blog.csd

android JNI调用机制

JNI的出现使得开发者既可以利用Java语言跨平台.类库丰 富.开发便捷等特点,又可以利用Native语言的高效. JNI是JVM实现中的一部分,因此Native语言和Java代码都运行在JVM的宿主环境. JNI是一个双向的接口:开发者不仅可以通过JNI在Java代码中访问Native模块,还可以在 Native代码中嵌入一个JVM,并通过JNI访问运行于其中的Java模块.可见,JNI担任了一个桥梁的角色,它将JVM与Native模块联系起 来,从而实现了Java代码与Native代码的互访

JAVA JNI原理详细介绍及简单实例代码_java

JAVA JNI原理 JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C.C++)的动态库进行交互,给其它语言发挥优势的机会. 有了JAVA标准平台的支持,使JNI模式更加易于实现和使用.在此总结了下面这个知识图: 实例: 环境说明:ubuntu 10.4.2 LTS系统 程序清单1:src/com/magc/jni/HelloWorld.java /** * */ package com.magc.jni;

jni使用基础(九)之c调用java事例demo

      1.Activity package com.devchina.ndk4; import android.app.Activity; import android.os.Bundle; import android.view.View; public class DevchinaActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(s

Android Ndk中C与JAVA之间的互相调用

本例实现一个简单的场景: 1.使用C编写一个方法,接收1个参数,方法中调用Java的方法. 2.Java类中编写一个方法,接收一个参数. 3.模拟调用场景:点击按钮 -> 调用C方法 -> C调用Java方法 -> 获得返回值 -> Toast提示. 项目结构图: 代码如下: CcallJava.java package com.shanhy.example.ccalljava; /** * C调用Java的方法 * * @author SHANHY(365384722@QQ.CO

C#调用Java方法(详细实例)

原文:C#调用Java方法(详细实例) C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用C++的例子网上很多,以一个C++的具体方法为例. C++代码 // 获取一帧图像数据 MVSMARTCAMCTRL_API int __stdcall MV_SC_GetOneFrame(IN void* handle, IN OUT unsigned ch

jni使用基础(八)之jni使用流程及C调用java简单说明

  jni使用步骤: 1.定义好native接口. 2.使用javah工具,生成头文件. 3.根据头文件,创建c文件. 4.编写Android.mk文件. 5.通过cygwin,进入到该工程目录,通过ndk-buld命令,编译c文件,生成so库文件 6.即可完成调用     怎样在c中调用java? 也就是要在c代码中,new出java对象,然后再调用java对象中的方法即可. 要创建java对象,就要找到java类,相当于找到类的class文件,使用jni中的 FindClass去找到相应的类

Android JNI的实例代码流程图

0Android JNI实例代码总体流程图 1C代码部分 2C代码部分 3Java代码部分 0.Android JNI实例代码总体流程图 1.C代码部分 2.C++代码部分 3.Java代码部分 Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢! <Android JNI的实例代码流程图>: http://blog.csdn.net/u014134180/article/details/78125723 如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有