全志A33开发板的安卓控制LED-2-JNI基础
虽然您可以完全使用Java编写应用程序,但有些情况下Java本身并不能满足您的应用程序的需求。当应用程序不能完全用Java编写时,程序员使用JNI编写Java本机方法来处理这些情况。
以下示例说明何时需要使用Java本机方法:
标准Java类库不支持应用程序所需的与平台相关的功能。
您已经有一个用另一种语言编写的库,并希望通过JNI使其可以访问Java代码。
您希望在较低级别的语言(如汇编语言)中实现一小部分时间关键代码。
来源:https://docs.oracle.com/javase/1.5.0/docs/guide/jni/
开发平台
芯灵思SinlinxA33开发板
淘宝店铺: https://sinlinx.taobao.com/
嵌入式linux 开发板交流 QQ:641395230
了解JNI函数
JNI函数就是在native层定义的本地函数,对应于在java层使用native关键字声明的方法的。直白的说,就是在Java层声明,C/C++语言实现的。当然,这个函数并不一般,它会通过JNI某种机制与Java层的方法进行关联,使得Java层代码可以很方便的调用它。
jni函数的语法和调用规则
- 将java语言的数据类型转换成底层语言调用规则
- 将java语言的方法调用转换成底层语言函数或方法
jni数据类型的转化
jni在java和C之间建立连接,因此jni首先要统一两者的数据类型
Java Type | Native Type | Description |
---|---|---|
boolean | jboolean | unsigned 8 bits |
byte | jbyte | signed 8 bits |
char | jchar | unsigned 16 bits |
short | jshort | signed 16 bits |
int | jint | signed 32 bits |
long | jlong | signed 64 bits |
float | jfloat | 32 bits |
double | jdouble | 64 bits |
void | void | N/A |
The following definition is provided for convenience.
define JNI_FALSE 0 #define JNI_TRUE 1
The jsize integer type is used to describe cardinal indices and sizes:
typedef jint jsize;
- java中可以直接调用底层语言的函数,jni规定了java调用底层语言的方法签名
- java中有重载概念,所以java方法转换成签名,签名再转化为函数
Type Signature | Java Type |
---|---|
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
L | fully-qualified-class |
[ type | type[] |
For example, the Java method:
long f (int n, String s, int[] arr);
has the following type signature:
(ILjava/lang/String;[I)J
jni机制实现
native 声明的函数可以不实现
class Cls {
native double f(int i, String s); // 声明为本地方法
static {
System.loadLibrary(“库名”); // 通过静态初始化语句块来加载动态库
}
}
程序实现测试java代码
javah -jni Hello
生成Hello .h
打开Hello .h 文件里面已经写好C函数的名字
C代码
将C文件制做成共享库.so,注意指定jni.h和jni_md.h文件路径
gcc -shared -fPIC hello.c -o libhello.so -I /usr/java/jdk1.6.0_45/include/ -I /usr/java/jdk1.6.0_45/include/linux/
java Hello
运行程序
实验现象
全志A33开发板的安卓控制LED-2-JNI基础的更多相关文章
- 全志A33开发板Linux内核定时器编程
开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 Linux 内核定时器是内核 ...
- 全志H3-NanoPi开发板SDK之三编译流程【转】
本文转载自:https://blog.csdn.net/yuesichiu/article/details/77600124 版权声明:本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许 ...
- 基于全志a33-vstar开发板的ap6210WiFi模块移植
可以去链接看更详细的,第一次用博客,这个编辑方式太不友好了. 文档:全志a33--系统移植--ap6210WiFi模块移?..链接:http://note.youdao.com/noteshare?i ...
- 迅为-IMX6开发板Android Eclipse 导入Led应用程序工程
本小节给大家详细讲解如何导入 Android 应用的工程文件.先解压迅为“iTOP-IMX6-Android4.4-LED 测试程序 r”压缩包.如下图所示,解压出ledtest 文件夹.<ig ...
- 基于全志A40i开发板——Linux-RT内核应用开发教程(1)
目录 1 Linux-RT内核简介 3 2 Linux系统实时性测试 3 3 rt_gpio_ctrl案例 10 4 rt_input案例 15 本文为Linux-RT内核应用开发教程的第一章节--L ...
- iTOP-i.MX6Q开发板支持安卓Android6.0系统
迅为IMX6开发板: Android4.4/6.0系统 Linux + Qt5.7系统 Ubuntu12.04系统 部分案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 核心板兼容 ...
- 芯灵思Sinlinx A33开发板boa与CGI移植
开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 641395230 在嵌入式设备的管理与交互中,基于W ...
- 安卓控制LED驱动编写
开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 打开Android Stud ...
- 创龙DSP6748开发板SYS/BIOS的LED闪烁-第2篇
1. 作为1个456MHz的处理器,不跑个操作系统说不过去,直接打开工程\Demo\SYSBIOS\Application\GPIO_LED,主函数比较简单 // 创建任务 Task_create(t ...
随机推荐
- Linux常见命令快捷方式
命令行编辑的辅助操作: Tab健:自动补齐 Ctrl +U :清空至首行 Ctrl +K: 清空至尾行 Ctrl +L:(或者clear) 清屏 Ctrl +C: 取消执行命令 获取帮助命令: 内 ...
- flink基础教程读书笔记
数据架构设计领域发生了重大的变化,基于流的处理是变化的核心. 分布式文件系统用来存储不经常更新的数据,他们也是大规模批量计算所以来的数据存储方式. 批处理架构(lambda架构)实现计数的方式:持续摄 ...
- xslt 2.0 分组
把数据拆成200个一组 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet vers ...
- “学习CSS布局” 笔记
学习网址:http://zh.learnlayout.com/no-layout.html 本文仅为学习笔记,内容非原创. position 默认值:static 没有添加额外属性的relative和 ...
- mongoDB-Cannot change the size of a document in a capped collection:
简单记录一下: 造成该问题的原因是集合被设置成了 固定集合 .固定集合的数据不能被修改.只能查找-删除-再插入
- Python Day2 Learning record
一.python初始化模块 Python的强大之处在于他有非常丰富和强大的标准库和第三方库 ...
- SharePoint Framework 向web部件中添加外部库
博客地址:http://blog.csdn.net/FoxDave 在进行开发的时候,你很可能会想要引用一些公开的JavaScript库到你的项目中,本文将会介绍如何打包和共享这些库. 打包脚本 默认 ...
- cocos2dx 3.17.1 导演类
进入导演类的头文件,首先看到的是一些头文件的引用:CCPlatformMacros(适配),CCRef(继承的父类),CCVector(3.0以后的新向量),CCScene(场景),CCMath(数学 ...
- 贝塞尔(Bezier) 曲线 研究
贝塞尔曲线最近经常接触到,今天研究了一下. 原理 关于它的原理,网上有很多. 1.一阶 2.二阶 3.多阶 可以看到,多阶可以慢慢降阶为一阶贝塞尔曲线. //一阶 private Vector3 Ba ...
- springboot 之 连接数据库
在连接数据库的时候,配置文件是这样写的,但是却一直报 java.sql.SQLException: Access denied for user 'root'@'localhost' (using p ...