转自: 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 一起提供的。
  • 能够创建共享库的CC++编译器。最常见的两个 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 Worldhttp://www.eoeandroid.com/thread-264543-1-1.html
三、Android NDK编程预备之Java jni入门创建C/C++共享库http://www.eoeandroid.com/thread-264971-1-1.html

更多相关文章

  1. Android(安卓)cocos2d 弹弓游戏 Catapult 源代码
  2. 〖Android〗/system/etc/fallback_fonts.xml
  3. 自动编译 打包 签名 android程序
  4. Android(安卓)Notification基础知识
  5. Android(安卓)自定义Dialog 的使用
  6. Android一行代码 搞定图片太多,太大OOM(内存溢出)
  7. 修改android 开机之后的默认语言成中文
  8. setTheme问题2
  9. Gradle上传aar到Maven

随机推荐

  1. 写TextView的Selector了解到的android读
  2. Android的多媒体框架OpenCore(PacketVideo
  3. 在Ubuntu上下载、编译、运行Android内核L
  4. 基于Android官方DrawerLayout实现抽屉导
  5. Cortex-A8和Android应用开发视频教程
  6. Android按键添加和处理的方案
  7. 概要
  8. Android* 操作系统上的应用程序远程调试
  9. Android(安卓)studio查看sdk源代码
  10. 参数设置