Android访问硬件常用的两种方式:通过JNI接口直接访问、通过Android硬件访问服务
通过JNI接口直接访问
Android应用程序通过loadLibrary函数加载C库,C库被加载时里面的JNI_Onload函数被调用,该函数注册了本地方法,来访问硬件驱动程序,从而控制硬件 。
Android硬件访问服务
应用程序只有systemserver能够访问硬件,其他的APP发送硬件访问请求给systemserver,统一管理。
1. Android系统起来后会先运行到SystemServer,会去load C库
frameworks\base\services\java\com\android\server\SystemServer.java
/**
* The main entry point from zygote.
*/
public static void main(String[] args) {
new SystemServer().run();
}
run方法里,load android_servers这个C库,对应的是onload.