在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
的大体步骤,具体的操作可能因为设备和环境的不同而有所区别,建议参考官方文档和相关的论坛帖子进行操作。