system.img无法打包非PRODUCT_PACKAGES目标解析

背景:

针对上一篇文章给大家步骤的关于aosp15版本上system.img的打包已经和以前aosp14不一样的问题,这里再简单描述如下:
在这里插入图片描述但是在aosp15后,明显发现并不会打包整个system文件夹。
下面来探索这个到底是为啥?

线索追踪:

这里主要通过对比在out目录下对应的img的输出的中间目录
先看aosp14上同样的目录如下:

test@test:~/disk2/aosp14/out/target/product/emulator_x86_64/obj/PACKAGING/systemimage_intermediates$ ls -l
total 991824
-rw-rw-r-- 1 test test       2960 Apr 24 12:36 system_image_info.txt
-rw-rw-r-- 1 test test 1083002880 Apr 24 12:36 system.img

再看aosp15的情况如下:

test@test:~/aosp15/out/target/product/emu64x/obj/PACKAGING/system_intermediates$ ll
total 791680
drwxrwxr-x  2 test test      4096 Apr 24 22:34 ./
drwxrwxr-x 25 test test      4096 Apr 24 11:14 ../
-rw-rw-r--  1 test test     62288 Apr 24 11:29 file_list.txt
-rw-rw-r--  1 test test    258910 Apr 24 11:14 file_list.txt.rsp
-rw-rw-r--  1 test test       992 Apr 24 22:33 system_image_info.txt
-rw-rw-r--  1 test test 877621248 Apr 24 22:35 system.img

明显多了了个文件file_list.txt和file_list.txt.rsp,这里其实主要就是看file_list.txt文件既可以,可以看看它的内容

在这里插入图片描述不过在文件查找发现并没有我们新编译的目标没有加入PRODUCT_PACKAGES的文件,所以基本上我们就可以断定,aosp15相比aosp14就是在打包img时候,多了这个file_list.txt文件作为过滤依据,在打包img文件时候就是只会打包只有在file_list.txt文件中的,不在文件中也就不会打包。

至于是否使我们猜想的结论可以还需要更多验证,和需要相关build模块的git log来验证,看看这个修改的目的。

追查为什么要加入file_list.txt

这里可以通过在aosp15的代码中进行相关的grep file_list字符,因为涉及是编译模式变化,当然要到build目录进行grep,结果如下:
在这里插入图片描述
然后通过git blame看看这个提交记,然后git show看看相关提交详情

test@test:~/aosp15/build/make/core$ git show 152cdfab7c2
commit 152cdfab7c2a02a64b24a706566183d863db7a38
Author: Cole Faust <colefaust@google.com>
Date:   Wed Jul 26 14:33:51 2023 -0700

    Clean staging dirs in build_image.py
    
    build_image.py now accepts a --input-directory-filter-file argument
    that contains a list of files to consider from the input directory.
    A new, temporary input directory will be created, and only the
    considered files will be copied to it.
    
    This removes most of the need for `m installclean`, as old files or
    files built manually will no longer end up on the partition.
    
    Bug: 205632228
    Test: Presubmits
    Change-Id: I07e0bf8e840abf0b51a2fdf67b758905fb3c5b5b

diff --git a/Changes.md b/Changes.md
index 6836528762..2616117d7a 100644
--- a/Changes.md
+++ b/Changes.md
@@ -1,4 +1,15 @@
-# Build System Changes for Android.mk Writers
+# Build System Changes for Android.mk/Android.bp Writers
+
+## Partitions are no longer affected by previous builds
+
+Partition builds used to include everything in their staging directories, and building an
+individual module will install it to the staging directory. Thus, previously, `m mymodule` followed
+by `m` would cause `mymodule` to be presinstalled on the device, even if it wasn't listed in
+`PRODUCT_PACKAGES`.
+
+This behavior has been changed, and now the partition images only include what they'd have if you
+did a clean build. This behavior can be disabled by setting the
+`BUILD_BROKEN_INCORRECT_PARTITION_IMAGES` environment variable or board config variable.
 
 ## Perform validation of Soong plugins

这里大概提交中可以看出:

build_image.py脚本新增的–input-directory-filter-file参数实现了输入目录文件过滤功能,其核心作用与实现逻辑可归纳为
a.通过指定包含文件列表的过滤文件,脚本会自动创建临时输入目录,仅复制列表中明确指定的文件到新目录

b.有效解决了旧版本构建残留文件或手动生成文件意外混入分区的问题

c.通过前置过滤机制保障输入目录纯净度

修改方案:

这里修改方案可以如下两种:

1、正常把目标放入到PRODUCT_PACKAGES,这种就啥事情也没有,本身目标也是系统img的一员

2、不想放入到PRODUCT_PACKAGES,还是想要可以打包到img
这种临时修改方案可以如下:
步骤一:修改out目录下的的file_list文件

修改 out/target/product/emu64x/obj/PACKAGING/system_intermediates/file_list.txt文件,如下在这里插入图片描述

然后再老方法,触发系统重新打包编译,运行模拟器看看现象如下:
在这里插入图片描述

更多framework实战vip独享干货,请关注下面“千里马学框架”

路畅车机系统升级包,路畅固件4.0.9 本CN-A6-GBDS-BC8-VIN-256-V1.51 。本号含义注释:   128,256,512指的是内存使用。   1.BC8:指NK是用于8311的蓝牙模块,且是用CSR WPP协议栈的。   2.BDS: 指是使用TriG的RF,配置为北斗独立定位模式的NK。   3.GBDS:是指GPS+BDS混合定位模式的NK。   4.GLN:是指GLONASS单独定位模式的NK。   5.GGLN:是指GPS+GLONASS混合定位的NK。   6.TL:使用TriG Lite的RF射频,只能使用GPS Only定位模式的NK。   7.DEBUG 或 DBG: 使用COM0输出调试信息的NK,只用于调试使用。   8.VIN: video in,指使用TW9912芯片的导航,具备VIP功能。   9.Q3: 奥迪Q3专用NK。   10.AUO: 雅阁专用NK。   11.G: 使用TriG RF的GPS,GNSS MODE为GPS ONLY模式, 简单就是指单模的GPS的NK。   12.CRI: 凌派专用NK。   13.U1: 强制使用USB1.1 fullspeed 速率的模式,一般用于原车USB和USB IPOD。   14.X1: 使用1024*480分辨率的NK。   15.ADV: 使用ADV的视频输芯片,跟9912功能一样,带ADV则不带VIN。   16.N128:指使用128MB的NAND FLASH。   17.XGA: 指蒙迪欧大屏使用的NK,768x1024分辨率的。   18.HDMI: 指支持CH7102的HDMI功能。   19.SFWE: 指使用SFWE蓝牙协议栈的NK。   20:A3: 指奥迪A3专用,分辨率为1024x600的NK。   21: GT: 使用德普特GT9XX系列的电容触摸屏。   22: D1: D1代表1024x600分辨率的LCD屏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值