打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
binder介绍——JNI的架构和实现

binder介绍——JNI的架构和实现

分类: Android 4.0 JNI 465人阅读 评论(0) 收藏 举报

目录(?)[+]

首先介绍一下JNI设计的目的:

JNI是Java Native Interface的缩写:

    The standard Java class library may not support the platform-dependent features needed by your application.

   You may already have a library or application written in another programming language and you wish to make it accessible to Java applications

    you may want to implement a small portion of time-critical code in a lower-level programming language,such as assembly, and then have your Java application call these functions.

Android系统中使用JNI原因

Android上层使用Java语言来开发应用程序,而且在Android系统架构图中可以看到,Android  framework层也都是向应用开发者提供Java API,但是所有的本地库都使用了C/C++来实现,这就需要使用JNI方式向Java提供接口,是java层的接口能调用本地的具体实现。

JNI架构

Android  framework层中的API大部分调用了native方法,这些方法也都由本地代码来实现,然后注册到系统中。注册过程需要使用Dalvik中的一个工具库nativehelper,该库的主要用于注册Java本地调用的函数(即通过JNI方式向上层提供接口)。

实现nativehelper库的源代码位于“dalvik\libnativehelper”目录中,最终将被编译为libnativehelper.so动态链接库。通常使用JNI方式时需要使用该库,其主要头文件如下:

dalvik\libnativehelper\include\nativehelper\jni.h(基于JNI标准的头文件)

dalvik\libnativehelper\include\nativehelper\JNIHelper.h(提供JNI注册功能的头文件)

具体的JNI代码的实现主要位于frameworks\base\core\jni\目录中,实现了Android API的大部分功能,最终将被编译为libandroid_runtime.so动态链接库,放置在out目录下的\system\lib目录中。

JNI的实现

实际上JNI需要实现的主要内容有两个:首先将java、代码中声明的原生方法在本地注册。然后注册到系统中。

Q:

在我们编写JNI的时候,很有可能导致系统启动的过程中,启动失败。分析主要的原因有两个方面:一是我们找不到class,另一种是我们找不到nativemethod。这两种情况都是我们在编写文件的时候的java和cpp的函数或者路径名称不匹配造成的。因此在此种情况下我们一定要仔细检查一边。此前出现问题的时候,我还白白的认为是android有什么玄机导致我们不能修改和添加文件和函数。后来发现是自己的粗心造成的。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android 体系结构介绍
android基本架构
【转】Android开发手记一 NDK编程实例
Android 架构
下接 android linux 基础知识总结[下]6
腾讯桌游客户端开发实战总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服