Android的JNI用法
2011-04-01 14:16
330 查看
在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中定义的一致!
在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中定义的一致!
相关文章推荐
- android jni 中常使用的函数及用法
- 通过Android平台移植魂斗罗游戏来阐述下jni的用法(把魂斗罗游戏嵌入到FC游戏模拟器里,省去了SD卡加载ROM)
- Android中JNI用法
- android jni中将大数据回调到java层的时候用法,比如视频流,音频流等,图片流等 比如我用ffmpeg解码好视频流,想送到java层使用opengGL进行显示,opencv进行人脸识别等等
- JNI 在Android中的详细用法
- JNI在android中的详细用法(再续)
- 通过Android平台移植魂斗罗游戏来阐述下jni的用法(把魂斗罗游戏嵌入到FC游戏模拟器里,省去了SD卡加载ROM)
- JNI 在Android中的详细用法(续集)
- Android APK JNI sample (JAVA JNI)
- 一天掌握Android JNI本地编程 快速入门
- android中jni的使用步骤及日志打印方法
- Android Jni中使用线程及回调更新UI
- Android之JNI NDK如何取消native support 重新add native support
- JNI用法示例
- android: 服务的基本用法
- Android TabHost用法详解
- Android数据库接口用法简介
- android-----JNI学习 helloworld
- Android JNI入门搭建环境(一)
- 常用intent列表 Android Intent 用法汇总