随着Android版本的更迭,尤其是Androd10和Android11源码的编译,单编模块的时间也特别慢,每次都需要半个小时甚至更长,因为每次单编都会重新加载所有mk文件,再生成ninja编译,此过程很慢,实际编译过程很快。
因此我们可以使用google提供的一种快速编译方式:ninja,使用ninja编译的话基本上十几秒就能快速编完一个模块,ninja编译只适用于修改项目的代码,如果涉及到文件的增减就必须用mm/make重新编译了。

使用方法

./prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-xxx.ninja相当于make,xxx为对应的lunch项,

示例

编译Settings
./prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-xxx.ninja Settings -j32 编译selinux
./prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-xxx.ninja selinux_policy -j32 编译Framework
./prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-xxx.ninja framework -j32 全编译
./prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-xxx.ninja -j32 2>&1 |tee ninja_build.log

相关拓展

Android.mk、Ninja、Soong、Blueprint、kati、Android.bp的概念之间的联系为:

android编译源码如何不对系统包自动签名 android ninja 编译_makefile


Android.mk、Ninja、Soong、Blueprint、kati 和 Android.bp 都是 Android 源代码构建系统(Build System)的不同组成部分。

  1. Android.mk 是构建系统早期版本中使用的 Makefile 格式文件,包含用于编译源代码和生成二进制文件的规则和依赖关系。
  2. Ninja 加粗样式是一款高效的并行编译工具,用于在较短时间内完成源码的编译,取代了 Android.mk 在构建系统中的核心作用。
  3. Soong 取代了旧有的 Android.mk 构建系统,提供了更灵活和可扩展的模块化设计。
  4. Blueprint 是 Soong 中的一个配置语言,对于每个模块的编译过程,它为系统定义了一组规则和约束条件。
  5. kati 是基于 GNU Make 的增强版,可以解析 Android.mk 文件和 GNU Make 规则,并将其转换为 Ninja 的语法格式。
  6. Android.bp 是 Soong 中的 Build Blueprint 文件,①提供了一种更简洁和易读的语法来描述源代码和构建规则,②同时允许进行更细粒度的控制以及高度优化。

总之,这些不同的部分共同组成了 Android 源代码构建系统的各个环节,它们相互配合,使得 Android 操作系统开发人员可以更加有效地创建和构建自己的代码,并生成最终的 Android 应用和操作系统。