JNI的核心是JNINativeMethod结构体,在jni.h中定义:

要实现java通过JNI调用本地C函数, 要有以下几步:

一:在C/C++中对本地函数定义JNINativeMethod结构体并在系统注册

例如frameworks/base/core/jni/中的android_util_Log.cpp表示对android.util包中的Log类提供支持。这个文件首先定义了所实现的java方法列表:

定义后只有对系统进行注册才能够使用,注册函数如下:

二:在java方法中声明为native方法。

public static native boolean isLoggable(String tag, int level);

/** @hide */ public static native int println_native(int bufID, int priority, String tag, String msg);

需要注意的是在注释中的@hide表示的是该方法虽然在java代码中是存在的,但是被隐藏的,不被视为Android的系统API。

上边的方法是在Android的系统API中增加本地接口,单一的java程序其实也是一样的方法调用本地接口,这样就无需更改系统API,android系统也提供了一个java程序直接调用本地接口的例子,在development/samples/目录下的SimpleJNI,可以参考学习下。

更多相关文章

  1. Android本地存储数据方法(超简单)
  2. Android(安卓)SurfaceFlinger 学习之路(七)----创建图形缓冲区Gr
  3. 使用Canvas的drawTextOnPath方法实现沿着Path绘制文本
  4. [转]android adapter 深刻分析
  5. Android短信数据库表结构介绍
  6. Android点击事件分发机制源码分析1——Activity
  7. Android如何处理未捕获异常
  8. 【android】handler.post方法的说明和注意事项
  9. Android(安卓)Studio签名配置方法

随机推荐

  1. android studio + ndk + cmake + jna +sq
  2. 安卓Android手机系统内文件夹目录解释
  3. Android之TabHost布局
  4. Android TabHost的标签放在底部,已写成框
  5. 【摘录】Android的线程使用来更新UI----T
  6. android启动模式android:launchMode
  7. Android基础之应用程序组件
  8. 50 Android Hack 读书笔记
  9. Android跨进程通信IPC之3——Bionic
  10. android "Only the original thread that