AOSP编译系统演进:从Make到Ninja的技术升级(Android13)

在Android 7.0之前,Android的编译系统主要使用GNU Make和Android.mk进行构建规则的描述和执行。然而,随着项目规模的扩大,Makefile组织方式导致了编译时间的增长等问题。

为了解决这些问题,从Android 7.0开始,Google引入了Soong构建系统,Soong 构建系统正好提供了 Android build 所需的灵活性。

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

ninja作为替代GNU Make的工具,并引入了kati工具来将Android.mk转换为ninja构建规则文件。随后,在Android 8.0中,Google进一步引入了Android.bp文件,用作替代Android.mk的纯配置文件。

Android.bp文件本质上是一个基于json格式的配置文件,不包含控制流程等复杂语法。它通过Blueprint+soong的转换过程生成相应的ninja构建规则文件(build.ninja),然后使用ninja进行实际的构建工作。

通过这一系列改进,Google的目标是加速Android项目的构建过程,提高整体效率。Soong构建系统由Kati GNU Make克隆工具和Ninja构建系统组件组成,这

在Android 7.0之前,Android的编译系统主要使用GNU Make和Android.mk进行构建规则的描述和执行。然而,随着项目规模的扩大,Makefile组织方式导致了编译时间的增长等问题。为了解决这些问题,从Android 7.0开始,Google引入了Soong构建系统,Soong 构建系统正好提供了 Android build 所需的灵活性。Soong 构建系统是在 Android 7.0 (Nougat) 中引入的,旨在取代 Make。 调整 android studio的目录结构 如何从 AOSP 获得此信息 创建一个 android studio项目副本/packages/apps/Camera2到新项目。 使用gradle config src dir和res dir ,如下所示: sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res_p'] java.srcDirs = ['src/main/java', 'src_pd', 'src_pd_gcam'] 您会发现缺少一些参考代码frameworks/ex/camera2缺少的代码。 其中有3个项目。 所以我创建了3个新模块并进行编译。 然后清理并构建,您可以在您的 android 设备上
//Rocky@20110312 Android 内核 Makefile 入门 Makefile 文件极其复杂,语法规则如同江水之多,但是我们本着实用解决问题的原则,只去一瓢,够用就可以。 内核模块或者设备驱动开发者经常接触的 Makefile 语法包含以下几个部分。 一:目标定义:         目标定义用来定义哪些内容要作为模块编译,哪些内容要编译进内核。         obj-y +=foo.o         表示要由foo.c或者foo.s文件编译得到foo.
1、整编译 当中 android 根目录下敲击 make 时候,根目录下的 Makefile 就一句话include build/core/main.mk,即调用main.mk,以下为main.mk的依赖规则 2、模块编译 模块编译依赖各个模块目标。 3、recovery.img (1)在TARGET_NO_RECOVERY=false,TARGET_NO_KERNEL=false时候 INSTALLE.........
Android .mk使用 // 一个 Android .mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数‘my-dir’, 由 编译系统 提供,用于返回当前路径(即包含 Android .mk file文件的目录) LOCAL_PATH := $(call my-dir) // Android .mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始,以include $(BUILD_XXX)结束 // CLEAR_VARS指的
可以参考build\soong\ android mk\ android mk进行查找 "LOCAL_32_BIT_ONLY": local32BitOnly, "LOCAL_AIDL_INCLUDES": localAidlIncludes, "LOCAL_ASSET_DIR": localizePathList("asset_dirs"), "LOCAL_C_INCLUDES": localIncludeDirs, brew install git python gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip openjdk-8-jdk repo 2. 下载 AOSP 源代码: mkdir aosp cd aosp repo init -u https:// android .googlesource.com/platform/manifest -b android - 13 .0.0_r1 repo sync -j$(nproc) 3. 配置环境变量: export PATH=~/ aosp /bin:$PATH export USE_CCACHE=1 export CCACHE_EXEC=/usr/local/bin/ccache 4. 配置编译环境: source build/envsetup.sh lunch aosp _arm64-eng 5. 开始编译: make -j$(nproc) 6. 等待编译完成后,生成的镜像文件位于out/target/product/<device>/目录下。 以上是在macOS 12.6.1上编译 Android AOSP 13 的大体步骤,具体的操作可能因为设备和环境的不同而有所区别,建议参考官方文档和相关的论坛帖子进行操作。