当前位置: 移动技术网 > IT编程>移动开发>Android > Android JNI c/c++调用java的实例

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

豪情2快播,云南省公务员考试注册入口,马里山整容前的样子

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网