Android的JNI用法
16lz
2021-01-23
在Android中提供JNI方式,实现java访问C语言程序。
在Android中,主要的JNI代码路径: Frameworks/base/core/jni 这个路径下的内容编译成libandroid_runtime.so,是一个普通动态库,放在目标系统的/system/lib下 此外,Android还包含其他JNI库,例如,媒体部分的JNI在framworks/base/media/jni中。编译成libmedia_jni.so JNI核心是JNINativeMethod结构体,在jni.h中 Typedef struct {const char * name; /* JNI函数名 */ const char * signature; /* 描述JNI函数的参数和返回值*/ void * fnPtr; /* 对应C语言的函数指针 */ } JNINativeMethod 在frameworks/base/core/jni中android_util_Lop.cpp中定义 Static JNINativeMethod gMethods[] = { {“isLoggable”,”(Ljava/lang/String;I)Z”,(void*)android_util_log_isLoggable}, {“printIn”,”(ILjava/lang/String;Ljava/lang/String;)I”,(void *)android_util_log_printIn}, }; 描述符源代码书写对照表 (Ljava/lang/String;)I int mmm(String x) (ILjava/lang/String;)V void mmm(int x, String) (I)Ljava/lang/String; String mmm(int x) (Ljava/lang/String;)[C char[ ] mmm(Stringx) (ILjava/lang/String;[[Lcom/sosnoski/generics/FileInfo;)V void mmm(int x, String y, FileInfo[ ][ ] z) gMethods需要注册才能用! 参考int register_android_util_Log(JNIEnv * env)函数 Androidruntime::registerNativeMethods(env,”android/util/Log”,gMethods,NELEM(gMethods)); 在frameworks/base/core/java/android/util中的Log.java内实现: Public final class Log{ public static native booolean isLoggable(String tag,int level); public static native int printIn(int priority,String tag,String msg); } 参数要和JNI中定义的一致!
更多相关文章
- C语言函数以及函数的使用
- Android中直接按路径读取properties文件
- android中去掉空格--trim函数
- Android 保存文件路径
- Android三角函数
- ISurfaceComposer接口有13个成员函数
- FileProvider 路径配置策略的理解