Android-系统架构-编译源码
Posted 天津 唐秙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-系统架构-编译源码相关的知识,希望对你有一定的参考价值。
文章目录
系统架构
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控制)。
以上是关于Android-系统架构-编译源码的主要内容,如果未能解决你的问题,请参考以下文章
Android源码解析RPC系列(一)---Binder原理