Android JNI c/c++调用java的实例
程序员文章站
2022-08-08 09:59:30
android jni c/c++调用java的实例
近期通过研究sdl源码 得出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);
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
下一篇: 三星展示CDMA家庭基站
推荐阅读