目录
JNI签名
Android系统
JNI签名
为什么会有方法签名这种东西呢?这是因为Java这边支持函数重载,即虽然参数不一样,但是方法名一样,那么在JNI层它们的方法名都会是一样的,那JNI也会犯迷糊了,得找哪个呢?
不过也正是因为其参数类型是不一样的,所以就出现了方法签名,利用方法签名和方法名来唯一确定一个JNI函数的调用。
既然方法签名是基于参数类型的不同而形成的,首先要知道Java各数据类型对应的签名是什么,也就是所谓的类型签名
对应于Java端的数据类型,我们也可以看一下下面的表:
Java 类型 类型签名
boolean Z
byte B
char C
short S
int I
long L
float F
double D
类 L全限定名;,比如String, 其签名为Ljava/lang/util/String;
数组 [类型签名, 比如 [B
因为byte已经是B,所以B被占了,Boolean选择用Z。Long为什么不用L,因为L表示对象,被占用,选择用J
Java层方法 JNI函数签名
String test ( ) Ljava/lang/String;
int f (int i, Object object) (ILjava/lang/Object;)I
void set (byte[ ] bytes) ([B)V //V: void 返回值
int [ ][ ] 其描述符为[[I
float[ ][ ] 其描述符为[[F
其中:
([B)V // V: void ,方法返回值,在括号外面 ,[ 代表数组
(int i, Object object) :(ILjava/lang/Object;)I :返回值I,
其中:
([B)V // V: void ,方法返回值,在括号外面 ,[ 代表数组
(int i, Object object) :(ILjava/lang/Object;)I :返回值I,
Android系统
当电源键按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行,
加载引导程序到RAM,然后执行。
引导程序是Android操作系统开始运行前的一个小程序,一般使用bootloader作为引导程序。引导程序分为两个阶段执行:
1)检测外部的RAM以及加载对第二阶段有用的程序。
2)引导程序设置网络,内存等等。
引导程序可以根据配置参数或输入数据进行配置内核,并且进行加载内核。
内核启动时会进行设置缓存,被保护存储器,计划列表,加载驱动。当内核完成系统设置后
它首先在系统文件中寻找init文件,然后启动init进程。
Init进程是Linux起来之后启动的第一个用户进程,android系统就是在这个进程的基础上启动起来的,进程号为1
- uboot启动流程
- uboot调试方法
- kernel启动流程
- kernel编译调试方法
- 概述init到启动Launcher过程