转自: http://www.eoeandroid.com/thread-264384-1-1.html
论坛
› eoe·Android应用开发区
› Android开发进阶&经验分享
12 1577 一、Android NDK编程预备之Java jni简介
linfeng1245 于 2013-4-2 11:02 发表在[Android分享] [复制链接][只看楼主][上一主题][下一主题] 没有eoe的账号,级别还太低,出门如何吹牛逼? 您需要登录才可以下载或查看,没有帐号?免费加入 x 本帖最后由 linfeng1245 于 2013-4-8 11:08 编辑
在Android Framework中,需要提供一种媒介和桥梁,将Java层与C/C++层有机地联系起来,使它们相互协调,共同完成任务。这就需要一种能够使本地代码与Java进行交互的接口即Java本地接口(JNI,Java Native Interface),而在Android NDK编程也是需要与本地代码进行交互,在学习NDK时掌握这种JNI是必不可少的,我现将我学习JNI的一些知识或勉为其难的一些心得。在此抛了块砖,有玉的尽管砸过来 JNI介绍 Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java SoftwareDevelopment Kit (SDK))的一部分。 JNI允许 Java 代码使用以其它语言(譬如 C 和 C++)编写的代码和代码库。Invocation API(JNI 的一部分)可以用来将 Java 虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用 Java 代码。 环境需求 JNI 最常见的两个应用:从 Java 程序调用 C/C++,以及从 C/C++ 程序调用 Java 代码 需要下列工具与组件: - Java编译器:随 SDK(Java 2 SDK及以上) 一起提供的 javac.exe。
- Java虚拟机(JVM):随 SDK 一起提供的 java.exe。
- 本机方法C文件生成器:随 SDK 一起提供的 javah.exe。(以上三个工具都在JDK主目录下的bin目录中)
- 定义 JNI 的库文件和本机头文件。jni.h (C 头文件,在JDK主目录的inculd目录中可看源码)、jvm.lib 和 jvm.dll (window下)或 libjvm.so 文件(linux下),这些文件都是随 SDK 一起提供的。
- 能够创建共享库的C和C++编译器。最常见的两个 C 编译器是用于 Windows 的 Visual C++ 和用于基于 UNIX 系统的 gcc/cc。
用Java调用C/C++代码 当无法用 Java 语言编写整个应用程序时,JNI 允许您使用本机代码。在下列典型情况下,您可能决定使用本机代码: - 希望用更低级、更快的编程语言去实现对时间有严格要求的代码。
- 希望从 Java 程序访问旧代码或代码库。
- 需要标准 Java 类库中不支持的依赖于平台的特性。
从 Java 代码调用 C/C++ 的六个步骤 从 Java 程序调用 C 或 C ++ 代码的过程由六个步骤组成。我们将在下面几页中深入讨论每个步骤,但还是先让我们迅速地浏览一下它们。 - 编写Java代码。我们将从编写 Java 类开始,这些类执行三个任务:声明将要调用的本机方法;装入包含本机代码的共享库;然后调用该本机方法。
- 编译Java代码。在使用 Java 类之前,必须成功地将它们编译成字节码。
- 创建C/C++头文件。C/C++ 头文件将声明想要调用的本机函数说明。然后,这个头文件与 C/C++ 函数实现(请参阅步骤 4)一起来创建共享库(请参阅步骤 5)。
- 编写C/C++代码。这一步实现 C 或 C++ 源代码文件中的函数。C/C++ 源文件必须包含步骤 3 中创建的头文件。
- 创建共享库文件。从步骤 4 中创建的 C 源代码文件来创建共享库文件。
- 运行Java程序。运行该代码,并查看它是否有用。我们还将讨论一些用于解决常见错误的技巧。
二、Android NDK编程预备之Java jni入门Hello World:http://www.eoeandroid.com/thread-264543-1-1.html 三、Android NDK编程预备之Java jni入门创建C/C++共享库:http://www.eoeandroid.com/thread-264971-1-1.html | |
- Android(安卓)cocos2d 弹弓游戏 Catapult 源代码
- 〖Android〗/system/etc/fallback_fonts.xml
- 自动编译 打包 签名 android程序
- Android(安卓)Notification基础知识
- Android(安卓)自定义Dialog 的使用
- Android一行代码 搞定图片太多,太大OOM(内存溢出)
- 修改android 开机之后的默认语言成中文
- setTheme问题2
- Gradle上传aar到Maven
随机推荐
-
写TextView的Selector了解到的android读
-
Android的多媒体框架OpenCore(PacketVideo
-
在Ubuntu上下载、编译、运行Android内核L
-
基于Android官方DrawerLayout实现抽屉导
-
Cortex-A8和Android应用开发视频教程
-
Android按键添加和处理的方案
-
概要
-
Android* 操作系统上的应用程序远程调试
-
Android(安卓)studio查看sdk源代码
-
参数设置