全志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 运行程序
实验现象

原文地址:https://blog.51cto.com/14199070/2353628

时间: 2024-11-08 09:39:01

全志A33开发板的安卓控制LED-2-JNI基础的相关文章

安卓控制LED驱动编写

安卓控制LED驱动编写 开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 打开Android Studio3.1 新建一个 NO Activity 项目 切换为project视图,到/app/src/main/java/com.xxxxxx目录,右击新建Activity->empty Activity 不要勾选×××选项 (勾选Generate Layout File表示会自

全志a13开发板——建立一个可以启动linux的SD卡

1  创建工具连 toolchain # apt-get install gcc-arm-linux-gnueabihf ncurses-dev uboot-mkimage build-essential git # Older (prior to 2013): apt-get install gcc-4.6-arm-linux-gnueabi ncurses-dev uboot-mkimage build-essential git building bootable sd card with

创龙DSP6748开发板SYS/BIOS的LED闪烁-第2篇

1. 作为1个456MHz的处理器,不跑个操作系统说不过去,直接打开工程\Demo\SYSBIOS\Application\GPIO_LED,主函数比较简单 // 创建任务 Task_create(taskMain, NULL, NULL); // 启动 SYS/BIOS 系统 BIOS_start(); 2. 把重点放在task的C文件在哪里?有哪些函数,熟悉一下D:\ti\bios_6_33_06_50\packages\ti\sysbios\knl,以前安装C6657的BIOS的包,里面有

TurnipBit—MicroPython开发板:妥妥拽拽零基础也能玩编程

可视化编程网站入口:www.turnipbit.com 说到编程.谈到硬件,你也许会想到屌丝逆袭女神的"传奇"故事,也许会浮现出带着眼镜.头发稀少.无精打采的程序猿形象."编程",听起来高大上却似乎离我们很远也让很多人包括很多家长和孩子望而却步.编程与几乎所有的电子设备息息相关,而随着越来越多电子设备的出现,我们必须承认生活已经逐渐被编程重重包围的事实. 对此,BBC从今年3月起开始向英国百万学生免费提供micro:bit设备.作为一款口袋大小的可编程计算机设备旨在

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

上位机串口控制FPGA开发板LED

实验目的: 上位机软件通过串口控制FPGA开发板上4个LED灯的亮灭,同时数码管显示LED灯亮的个数,实验效果如下图. 实验背景: 一直都想学习FPGA,这次算是入门了,我是看书学习的,所以FPGA的代码是参考着书本上的修改的,其实很高兴,因为这个实验是我自己发散出来的,书上的开发板和我用的开发板不一样,并且小软件也是自己用C#写的,总之,挺开心吧,本着开源的精神,所有的上位机代码和FPGA程序上传,如有需要请自行下载(点此下载).工作就没时间写教程之类的,简单的介绍一下吧 硬件平台: Cycl

全志A33 linux led驱动编程(附实测参考代码)

开发平台 * 芯灵思SinlinxA33开发板 #实验原理 在芯灵思开发板上,没有led灯模块,只能通过引脚电平观察: 这里我选择LS-INT引脚. 全志A33一共有10组IO口,每组IO有9个相关功能控制器,LS-INT属于PB7,相关寄存器如图 本次实验只用到这两个寄存器,在程序中命名为gpio_con,gpio_dat ,设置为输出引脚. 1)注册 class_register(class) 将class注册到内核中.调用前,必须手动分配class内存;调用后必须设置class的name等

【NXP开发板应用—智能插排】2.初步解析example之GPI

[前言] 首先感谢深圳市米尔科技有限公司举办的这次活动并予以本人参加这次活动的机会,以往接触过嵌入式,但那都是皮毛,最多刷个系统之类的,可以说对于嵌入式系统开发这件事情是相当非常陌生的,这次活动为我提供了一个非常好的入门和学习嵌入式的机会,同时在社区及技术群内也得到了很大的帮助和鼓励,这也是我不断前行和进步的动力,在这里一并致谢了.下面我附上本次学习心得及过程. 米尔MYS-6ULX单板机介绍: MYS-6ULX是一款以NXP i.MX6UL/i.MX6ULL处理器,Cortex-A7内核为核心

【嵌入式4412开发板学习教程】Uboot教程之uboot基础概念和框架

[4412开发板教程]Uboot教程之uboot基础概念和框架 正在学习uboot,教程讲解的很详细,先上个笔记,视频上传到网盘后再补上...... 知识点: 1.操作系统分层的概念 Windows:bios→内核模式→用户模式→用户程序 linux:bootloader→内核→文件系统→用户程序 2.bootboader种类介绍 U-boot是最通用的bootboader.(210,4412等等) vivi 针对三星的ARM来定制2440上有用到 3.4412休眠问题 它可以直接跳过uboot