设为首页 加入收藏

TOP

Android 编译介绍(一)
2023-09-23 15:44:10 】 浏览:481
Tags:Android

一、需求

        Android的源码非常的庞大,编译Android系统往往会占用我们很长的时间,我们需要了解下Android的编译规则,以期能提高我们的开发效率,达到程序员按时下班的伟大理想。

二、环境

  1. 平台:QCM2290
  2. 版本:Android 11
  3. 编译服务器: 64G + 32核

三、相关概念

3.1 Treble架构

        由于Android各个层级之间的耦合性大,Android系统更新成本高,导致Android系统版本虽然已经释放了很久,但是市面上Android的系统依然存在滞后、碎片化的情况。Android 8.0 重新设计了 Android 操作系统框架(名为“Treble”的项目),以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。
        Android 7.x 及更早版本中没有正式的供应商接口。当设备制造上升级Android系统时,需要移植大量的代码。因为Framework与供应商代码打包在一个镜像中,所以必须整体升级。

        Android 8.0 及更高版本提供了一个稳定的新供应商接口。设备制造商访问的是 Android 代码中特定于硬件的部分,而不会依赖供应商的私有接口。并且供应商会使用独立的vendor分区。这样,设备制造商在更新 Android 操作系统框架,只需要单独升级system分区。同时稳定的供应商接口会保证兼容性。
        Treble的目标是将供应商实现(大部分有芯片制造商编写特定设备软件和底层软件)与Android操作系统框架分隔开来,这通过供应商接口来实现。为了确保供应商实现的向前兼容性,供应商接口会由供应商测试套件 (VTS) 进行验证,该套件类似于兼容性测试套件 (CTS)。您可以使用 VTS 在旧版 Android 架构和当前 Android 架构中自动执行 HAL 和操作系统内核测试。

3.2 Soong

        Soong 构建系统是在 Android 7.0 (Nougat) 中引入的,旨在取代 Make。它利用 Kati GNU Make 克隆工具和 Ninja 构建系统组件来加速 Android 的构建。

        Soong是由Go语言写的一个项目,从Android 7.0开始,在prebuilts/go/目录下新增了Go语言所需的运行环境,Soong在编译时使用,解析Android.bp,将之转化为Ninja文件,完成Android的选择编译,解析配置工作等。故Soong相当于Makefile编译系统的核心,即build/make/core下面的内容。

3.3 Blueprint

        Blueprint由Go语言编写,是生成、解析Android.bp的工具,是Soong的一部分。Soong则是专为Android编译而设计的工具,Blueprint只是解析文件的形式,而Soong则解释内容的含义。

3.4 KATI

        kati是Google专门为了Android而开发的一个小项目,基于Golang和C++。目的是为了把Android中的Makefile,转换成Ninja文件。
        在最新的Android R(11)中,Google已经移除了/build/kati目录,只保留了一个预先编译出来的可执行文件:prebuilts/build-tools/linux-x86/bin/ckati,这意味着Google在逐渐从编译系统中移除kati,预计1-2个Android大版本,.mk文件全部都切换成.bp文件后,kati将会正式退出Android历史舞台。
        kati是go语言写的,而ckati是c++写的。kati官方文档对它的描述是:kati is an experimental GNU make clone。也就是说,kati是对等make命令的。只不过kati并不执行具体的编译工作,而是生成ninja文件。kati刚开始是使用Golang编写的,但是后来验证下来发现编译速度不行,于是改成C++编写,所以现在存在两个版本:kati、ckati。

3.5 Ninja

        Ninja 是Google的一名程序员推出的注重速度的构建工具。一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。
        Ninja是一个致力于速度的小型编译系统(类似于Make),如果把其他编译系统比做高级语言的话,Ninja就是汇编语言。通常使用Kati或soong把makefile转换成Ninja files,然后用Ninja编译。
        ninja核心是由C/C++编写的,同时有一部分辅助功能由python和shell实现。由于其开源性,所以可以利用ninja的开源代码进行各种个性化的编译定制。

3.5 Makefile

        Makefile是一个文本文件,是GNU make程序在执行的时候默认读取的配置文件。其关系到了整个工程的编译规则。一个工程中的源文件按类型、功能、模块分别放在若干个目录中,makefile定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
        其好处在于:写好makefile之后,只需要一个“make”命令,整个工程就能完全自动编译,极大地提高了软件开发的效率。

四、高通编译

        我司高通项目的编译,有一个痛点,就是编译的时间太久,即便是remake一

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇没有了 下一篇在 Android Studio Java 项目里混..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目