JNI入门(一):静态注册

从编程语言上来讲,Android Framework是由java编写的java层以及C/C++编写的native层组成。其中java层可以调用C/C++的函数,而C/C++也可以调用j或者访问ava层的函数、变量等,在这两层之间充当连接桥梁的角色就是java本地接口(JNI,Java Native Interface)。

JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如应用与使用C、C++、汇编等语言编写的应用程序、模块、库之间进行交互操作。

通常业界会在以下情况下使用JNI:

  1. 注重处理速度,与本地代码(C/C++)相比,Java代码的执行速度会慢一些, 如果对某段代码的执行速度有较高的要求,建议使用C/C++编写代码。
  2. 硬件控制, 为了更好的控制硬件,硬件的控制代码通常使用C语言来编写,通过JNI将其与Java层连接起来,从而实现对硬件的控制。
  3. 复用既有的C/C++代码,在进行开发时,常常会有一些已经编写好的C/C++代码,通过复用该代码,可以大大提高开发效率,所以此时也会通过JNI来实现。

在Android平台下,若想进行JNI编程,就会用到由谷歌公司开发的一个工具集(NDK),开发者利用该工具集可以轻松的开发出基于JNI机制的应用,该工具集中通常提供如下功能.

ndk-build : 此脚本用于在 NDK 中心启动构建脚本。包含功能:

  1. 自动探测开发系统和应用项目文件以确定要构建的内容
  2. 生成二进制文件
  3. 将二进制文件复制到应用的项目路径
  4. 原生共享库:NDK 从原生源代码构建这些库或 .so 文件
  5. 原生静态库:NDK 也可以构建静态库或 .a 文件
  6. Java 原生接口(JNI):JNI 是 Java 和 C++ 组件用以互相沟通的接口
  7. 应用二进制界面(ABI):定义应用的机器代码在运行时如何与系统交互。NDK 根据这些定义构建.so 文件。不同的 ABI 对应不同的架构
  8. 清单:如果应用没有 Java 组件 ,必须在清单中声明 NativeActivity 类
  9. Android.mk :必须在 jni 文件夹内创建 Android.mk 配置文件。ndk-build 脚本将查看此文件,其中定义了模块及其名称、要编译的源文件、版本标志以及要链接的库。
  10. Application.mk :此文件枚举并描述应用需要的模块。包括:用于针对特定平台进行编译的 ABI
  11. 工具链
  12. 要包含的标准库

 

本文档教大家如何进行JNI编程:

1: 首先创建工程NativeHello

创建包含native方法的类

注意: System.loadLibrary在NativeClass被加载时会调用.

3:创建JNI头文件

4: 创建Android.mk

5: 创建NativeClass.cpp,并编写JNI接口方法

6: 在jni目录执行ndk-build,编译库文件

7: 执行该APP,输出结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值