http://blog.csdn.net/typename/article/details/6729592

近期通过研究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那边定义的函数的名字

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



更多相关文章

  1. android的listview中setselection()不起作用的解决方案
  2. android 定义 程序 Scheme 接收特定URI开启Activity
  3. Android-Service组件之AIDL
  4. Android中HAL如何向上层提供接口总结-hw_device_t
  5. Android(安卓)Wifi 启动过程分析
  6. Android(安卓)+ Axis2
  7. Android(安卓)8.1.0 SystemUI 修改之 - 系统锁屏状态下点击用户
  8. [ZZ][Android]使用bindService启动服务
  9. OpenCV Android(安卓)通过 jni调用 使用opencv (Android(安卓)St

随机推荐

  1. Android(安卓)6.0及运行时权限处理
  2. Android的ps命令介绍和技巧
  3. 2.5.3 使用alertDialog创建自定义对话框
  4. Android设置android:clipChildren达到的
  5. Android:关于声明文件中android:process
  6. Fetching https://dl-ssl.google.com/and
  7. Android串口Serial服务解析
  8. android:layout_gravity 和 android:grav
  9. Android(安卓)O 版本(Android(安卓)8.0) 存
  10. Android音乐播放器系列讲解之一