android调用底层原理

android调用底层原理,第1张

android调用底层原理 android中app调用c过程


什么是JNI?

是一种协议,并提供一套编程框架,让java和本地语言(C/C++)之间能够相互调用。
JNI简单来说就是java程序可以调用C/C++写的动态链接库

为什么需要JNI

Java由于是平台无关语言,通过不同 *** 作系统下具有相同功能的JVM实现一次编译,可以到处运行。也正是因为JVM,使得Java程序运行的效率相对于C/C++等本地语言较低,而且不能像C/C++一样直接 *** 作底层硬件

什么是NDK

Native Development Kit 本地开发工具集。简单的说就是一整套工具,用来构建、编译本地c/c++源程序,生成.so动态库,加入本地库中,让Android应用程序中Java程序通过jni调用。

能再具体点写出调用过程吗

那小朋友们怎么知道android如何控制硬件的?

andirod的硬件抽象层HAL,运行在用户空间中,它向下屏蔽硬件驱动模块的实现细节,向上提供硬件访问服务。Android系统分为两层来支持硬件设备,其中一层实现在用户空间(User Space),另外一层是现在内核空间(Kernel Space)。传统的Linux系统把对硬件的支持完全是现在在内核空间,即把对硬件的支持完全实现在硬件驱动模块中。

因为在linux内核中会损害厂家的利益
因此,Android才会想到把对硬件的支持分成硬件抽象层和内核驱动层( ioctrl ),内核驱动层只提供简单的访问硬件逻辑,例如读写硬件寄存器的通道,至于从硬件中读到了什么值或者写了什么值到硬件中的逻辑,都放在硬件抽象层中去了,这样就可以把商业秘密隐藏起来了。

详细

Kernel Driver

这里的kernel driver相对于linux真正的driver形式上是一样的,也提供open,read,write,ioctl,mmap等接口,但是,一般来说,只通过这些代码,你并不能了解到硬件的特性,比如write接口,就可以只作成往寄存器写 *** 作,至于如何写,为什么要写,这些工作都会再HAL层进行,而一般用户是看不到这些代码的。这也是为什么linux mainstream把android的kernel踢出去的原因,因为这些driver根本无法用在其他的linux平台上。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5695594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存