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平台提供了三个命令用来编译,分别是makemmmmm,使用方法和优劣如下:
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控制)。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天津 唐秙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值