为了账号安全,请及时绑定邮箱和手机立即绑定

AOSP项目是如何构建的?

AOSP项目是如何构建的?

Go
宝慕林4294392 2022-07-25 10:40:02
AOSP 的所有 git 项目都由 repo 工具克隆,该工具读取以下 xml:https ://android.googlesource.com/platform/manifest/+/refs/heads/master/default.xml 。AOSP 指南说,为了构建,我们应该source build/envsetup.sh在 repo 克隆所有存储库的文件夹上运行。因此,让我们看看platform/build清单存储库中的 default.xml。我们得到  <project path="build/make" name="platform/build" groups="pdk" >    <copyfile src="core/root.mk" dest="Makefile" />    <linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" />    <linkfile src="buildspec.mk.default" dest="build/buildspec.mk.default" />    <linkfile src="core" dest="build/core" />    <linkfile src="envsetup.sh" dest="build/envsetup.sh" />    <linkfile src="target" dest="build/target" />    <linkfile src="tools" dest="build/tools" />  </project>我们确认envsetup.sh 所在的位置。, 它在platform/build. 它定义了m根据 AOSP 指南构建整个 AOSP 项目的功能:function _trigger_build()(    local -r bc="$1"; shift    if T="$(gettop)"; then      _wrap_build "$T/build/soong/soong_ui.bash" --build-mode --${bc} --dir="$(pwd)" "$@"    else      echo "Couldn't locate the top of the tree. Try setting TOP."    fi)function m()(    _trigger_build "all-modules" "$@")好的,看起来build/soong/soong_ui.bash是我们运行m函数时调用的地方,所以这个脚本应该构建所有内容。这是soong_ui.bash。它来源source ${TOP}/build/soong/scripts/microfactory.bash然后调用soong_build_go soong_ui android/soong/cmd/soong_ui我们build_go在build/blueprint 的 microfactory.bash 中找到:看起来所有这些都是为了构建microfactory.go项目。我认为这与宋构建系统有关。我现在迷路了。构建 microfactory.go 后,会发生什么?实际的 Android 代码在哪里构建?microfactory.sh 说 build_go 这样做:Bootstrap microfactory from source if necessary and use it to build the requested binary.请求的二进制文件是android/soong/cmd/soong_ui我正在尝试查找android/soong/cmd/soong_ui,但我不知道它是什么/在哪里,但我猜是很快的构建系统,而不是 AOSP 项目。我假设song_ui是很快的可执行文件。它应该在Android.bp上查找${TOP},但我认为在 repo 克隆所有内容的地方没有。
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

你已经发现了很多,你是对的链接 from mtosoong_ui.bash然后开始microfactory

从我对代码的阅读来看, 的目的是使用二进制名称soong_build_go构建包。就像 Yong 在另一个答案中所说的那样,这会在目录下创建二进制文件,并且该二进制文件的源位于.android/soong/cmd/soong_uisoong_uisoong_ui$(getoutdir)build/soong/cmd/soong_ui/main.go

至于您更新的关于Android.bp文件的问题,它是从运行时开始符号链接的,但正如您所看到的,该文件是空的。build/soong/root.bprepo sync

相反,m它告诉 Soong 构建all_modules,最终运行另一个名为kati根据https://github.com/google/kati中的描述,Kati 处理 GNU makefile 并将它们转换为Ninja构建文件。

在这一点上,我们可以(大部分)假设常规的 Make 语义,即使底层构建系统实际上是 Kati 和 Ninja 和 Soong 等。由于工作目录是$TOP,因此使用符号Makefile链接的根目录build/make/core/root.mk。其中包括main.mk然后包括build/make/core/Makefile。在该 makefile 中,您可以看到不同.img文件是如何构建的(例如system.img)。


查看完整回答
反对 回复 2022-07-25
?
慕仙森

TA贡献1827条经验 获得超8个赞

我们以 make systemimage 为例:

调用顺序为:

  1. prebuilts/build-tools/linux-x86/bin/makeparallel --ninja build/soong/soong_ui.bash --make-mode "systemimage"。$(getoutdir)/soong_ui 是由“build_go soong_ui android/soong/cmd/soong_ui”构建的

  2. 构建/soong/cmd/soong_ui/main.go#main()

  3. 宋/ui/build/build.go#Build()


查看完整回答
反对 回复 2022-07-25
  • 2 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号