系统源码的下载,编译,调试:

编译源码需要在Linux环境下进行。在搭建好Linux环境之后,还要安装增强工具gcc编译器和perl库。安装增强工具是目的有:实现虚拟机和主机的文件共享;可以使用全屏模式。

AOSP源码的下载:

AOSP是由google开发的Android开源项目。简单来说,AOSP就是一个Android系统源码项目,通过它就可以定制Android操作系统,而国内手机厂商就是在此基础上开发定制系统的。下载AOSP的第一步就是下载repo。

1.下载repo:

因为Android的系统源码包含数百个git库,下载那么多的git库是一个繁重的任务,因此google开发了repo,它是一个用于管理Android版本库的工具,使用了python进行了一定的封装,简化了对多个git版本库的管理任务。        

2.下载源码:

下载AOSP源码包括内核源码的下载,因为内核源码是单独的且有很多版本。

系统源码的整编和单编:

为了实现这些需求,我们需要编译系统源码:

  • 动态调试Android系统源码。
  • 定制Android系统。
  • 将最新版本的Android系统刷入自己的Android设备中。
  • 将系统源码导入Android Studio中。
     

1.编译系统的概述:

1.1:常见概念:

1.Makefile:

Android平台的编译系统,其实就是用Makefile写的一个独立项目。它定义了规则,实现了“自动化编译”,不仅能把分散在数百个Git库中的代码整合起来进编译,而且还能把产物分门别类地输出到一个目录中,打包成手机ROM,还可以生成应用开发时所使用的SDK、NDK等。因此,采用Makefile编写的编译系统,也可以称为Makefile编译系统。

2.Android.mk:

Makefile编译系统的一部分Android.mk,定义了一个模块的必要参数,使模块随着平台编译。通俗来讲,就是告诉编译系统以什么样的规则来编译源码,并生成对应的目标文件。

3.Ninja:

Ninja是一个致力于提升速度的小型编译系统,如果把其他编泽系统看作高级语言,那么Ninja的目标就是汇编语言。

4.Soong:

Soong是Google用来替代此前Makefile编译系统的替代品,负责解析Android.bp文件,并将之转换为Ninja文件。

5.Blueprint:

Blueprint用来解析Android.bp文件,并将其翻译为Ninja语法文件。

6.kati:

kati是Google专门为Android开发的一个基于Golang和C++的小项目,其用处是将Android中的Makefile转换成Ninja文件。

7.Android.bp:

Android.bp是用来替换Android.mk的配置文件。

1.2:图解:

Blueprint负责解析Android.bp文件的内容,Blueprint类似一个处理相关语法的库文件,Soong则用于定义具体如何处理相应的语法及命令实现。通俗来讲,就是 Soong借助于Blueprint定义的Android.bp语法,完成对Android.bp的解析,并最终将其转换成 Ninja文件。Makefile文件会通过kati转换为Ninja文件。Makefile默认的文件名为Makefle或makefile,也常用.make或.mk作为文件的后缀,Ninja的默认文件名为build.ninja,其他文件以.ninja作为文件后级,Makefile与 Ninja的区别在于Makefile是为开发编写的,而Ninja则用于生成其他程序,如果说 Makeflie是高级语言,那么Ninja就是汇编语言。

1.3:编译源码的方式:

Android系统源码的编译方式有很多种,其中主要有以下几种:

  • 在Linux中直接进行系统源码编译(Android官方支持)。
  • 在macOS中直接进行系统源码编译(Android官方支持)。
  • 使用Docker编译,支持macOS和Windows。

2.源码的整编:

整编就是对整个Android源码进行编译,整编主要有三个步骤,分别是:

  1. 初始化环境。
  2. 选择编译的目标。lunch命令。
  3. 通过-jN参数来设置编译的并行任务数,提高编译的速度。

补充:

  1. 编译目标的格式为:BUILD-BUILDTYPE。例如:aosp_arm-eng它的BUILD是aosp_arm,BUILDTYPE是eng。其中BUILD指的是编译出的镜像可以在什么样的环境下运行,而aosp代表Android开源项目,arm代表系统运行在ARM架构的处理器上。BUILDTYPE指的是编译类型,有以下三种:user(正式发布到市场的版本),userdebug(在user版本的基础上开放了root权限和debug权限),eng(开发工程师使用的版本,拥有最大的权限和额外调试工具的开发配置)。
  2. 编译之后会生成三个重要的镜像文件,分别是system.img(系统镜像,其中包括了Android系统的主要目录和文件),userdata.img(用户镜像,是Android系统中用来存放用户数据的地方),ramdisk.img(根文件系统镜像,包括一些启动Android系统的重要文件)。

3.源码的单编:

常见的编译命令有:

  • mm:编译当前目录下的模块,不编译依赖的模块,成功后系统提示生成文件的存放路径。
  • mmm:编译指定目录下的模块,不编译它所依赖的其他模块。
  • mma:编译当前目录下的模块以及其的依赖项。
  • mmma:编译指定的路径下的所有模块,并且包含其的依赖项。

如果修改了源码,想要查看生成的apk文件,则有如下方式:

  • 通过adb push或者adb install来安装apk。
  • 使用make snod命令,来重新生成system.img,然后运行模拟器。

导入系统源码:

  1. 使用Source Insight导入系统源码,但是不能调试。
  2. Android studio导入系统源码,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mo@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值