系统架构
Android系统架构
Linux内核层: ??包含Linux内核和一些驱动模块(比如USB驱动,Camera驱动,蓝牙驱动)。 Libraries层: ??这一层提供动态库(也叫做共享库),Android运行时库,Dalvik虚拟机等。 Framework层: ??这一层大部分使用的是java语言编写,也叫java框架层,为应用程序提供API。 Applications层: ??与用户进行交互的就是这些应用程序,他们都是用java进行开发的。
??java是通过JNI层调用Linux OS中的系统调用来完成对应的功能。java世界是通过JNI层通过IPC方式与Native世界进行交互(IPC方式我们后面再说),除此之外,Socket也是常见的IPC方式。
编译源码
??Android平台提供了三个命令用来编译,分别是make,mmm,mm,使用方法和优劣如下: make: ??不带任何的参数,它用于编译整个系统,时间比较长,除非想要编译整个系统,否则一般不推荐。 make MediaProvider: ??优点是会把该模块依赖的其他模块一起编译,例如make libmedia依赖的库全部编译好,其缺点也很明显,需要整个源码来定位MediaProvider模块所使用的Android.mk文件,并且还要判断该模块所依赖的其他模块是否有修改,整天编译时间比较长。 mmm packages/providers/MediaProvider: ??该命令将编译指定目录下的目标模块,而不是编译所依赖的模块,所以,如果是初次编译,采用这种方式一个模块往往会报错,错误原因是因为它所依赖的模块未被编译。 mm: ??这种方式需要先用cd命令进入packages/providers/MediaProvider目录,然后执行mm命令,它和mmm一样,只编译目标模块,执行编译的速度都很快。 使用推荐: ??1.如果只知道目标模块的名称,则应使用make模块名的方式进行编译,初次编译需要使用这种方法。 ??2.如果不知道目标模块的名称,但是直到目标模块的目录,需要使用cd进入目录,然后使用mmm或mm来编译,如果是初次进行编译,则需要使用make,以后就可以使用mmm或mm,这样节约时间。 注意: ??1.一般编译时都是用的是增量编译,就是只编译发生变化的目标文件,但是有时候需要编译所有的目标文件,那么就可以使用make中的-B选项,-B选项强制编译所有的目标文件。 ??2.系统服务被杀掉一般都会自动重启(由init控制)。
|