从114G输出文件反推:OpenHarmony编译后,out目录里到底装了啥?如何优化存储空间?
从114G输出文件反推OpenHarmony编译后out目录里到底装了啥如何优化存储空间当你第一次完成OpenHarmony的完整编译看到out目录膨胀到51G甚至更大时难免会感到震惊。更令人头疼的是随着开发迭代和多次编译这个数字可能轻松突破100G。对于使用SSD的开发机来说这简直是存储空间的噩梦。但别急着删除整个目录——理解out的结构和内容能帮你精准释放空间而不影响后续开发效率。1. 解剖OpenHarmony的编译产出物编译后的out目录就像一座精心规划的工业园每个区域都有特定职能。以常见的rk3568目标为例我们打开这个黑箱out/rk3568/ ├── args.gn # 本次编译的GN构建参数快照 ├── build.ninja # 实际执行的构建指令集 ├── build_configs/ # 各模块的构建配置存档 ├── gen/ # 自动生成的代码和资源 ├── lib.unstripped/ # 带调试符号的库文件占空间大户 ├── obj/ # 中间编译对象空间消耗主力 │ ├── third_party/ # 第三方库的编译中间文件 │ └── ... # 各模块的.o/.d文件 ├── packages/ # 可发布的软件包 ├── subsystem_info.json # 子系统依赖关系图 └── images/ # 最终刷机镜像核心产出 ├── system.img # 系统分区镜像 ├── vendor.img # 厂商定制镜像 └── ... # 其他分区镜像1.1 空间占用TOP3分析通过du -sh * | sort -h命令实测发现目录/文件类型占比是否可清理obj/58%可部分清理lib.unstripped/22%调试时可保留gen/12%需保留images/5%必须保留其他3%视情况而定提示obj/下的.o文件在增量编译时会复用但完全清理后首次编译将更耗时2. 精准清理保留核心产物的空间优化术2.1 安全清理清单这些文件可以放心删除# 清理过时的中间文件 find out/rk3568/obj -name *.o -mtime 7 -exec rm -f {} \; # 删除旧版本的调试符号库 rm -rf out/rk3568/lib.unstripped/*.old # 清除临时构建日志 find out -name *.log -delete但遇到这些文件请三思images/下的所有镜像文件刷机必需args.gn和build.ninja增量编译依赖gen/目录下的自动生成代码2.2 使用编译缓存智能节省在编译命令中加入--ccache参数# 首次编译生成缓存 ./build.sh --product-name rk3568 --ccache # 后续编译命中缓存 ./build.sh --product-name rk3568 --ccache --no-prebuilt-sdk实测效果对比编译类型耗时空间占用obj目录增量全新编译7.5h114G63G带ccache4.2h98G47G增量编译28min6G1.2G注意ccache默认占用5G空间可通过export CCACHE_SIZE10G调整3. 高级空间管理策略3.1 符号链接妙用将大目录挂载到机械硬盘# 1. 创建外部存储目录 mkdir /mnt/hdd/oh_out # 2. 迁移现有out目录 mv out/rk3568/obj /mnt/hdd/oh_out/ # 3. 创建符号链接 ln -s /mnt/hdd/oh_out/obj out/rk3568/obj3.2 模块化编译技巧只编译特定子系统# 单独编译ACE子系统 ./build.sh --product-name rk3568 --build-target ace_engine # 编译后立即清理该模块中间文件 find out/rk3568/obj/ace_engine -name *.o -delete3.3 自动化清理脚本创建oh_clean.sh#!/bin/bash # 保留最近3次编译的中间文件 KEEP_COUNT3 # 清理旧版obj备份 ls -dt out/rk3568/obj.* | tail -n $((KEEP_COUNT1)) | xargs rm -rf # 压缩一周前的日志 find out -name *.log -mtime 7 -exec gzip {} \;4. 编译环境调优实战4.1 并行编译参数优化调整build/gn/toolchain/BUILD.gn中的关键参数# 优化线程利用率 if (is_linux) { cpu_count host_cpu arm ? 4 : 16 ldflags [ -Wl,--threads${cpu_count} ] } # 控制调试信息级别 if (is_debug) { cflags [ -g1 ] # 比默认-g3节省30%空间 }4.2 文件系统优化针对EXT4文件系统的优化配置# 调整日志模式减少IO tune2fs -o journal_data_writeback /dev/nvme0n1p2 # 禁用访问时间记录 mount -o remount,noatime /4.3 内存磁盘加速利用tmpfs加速频繁访问的目录# 创建1G内存磁盘 sudo mount -t tmpfs -o size1G tmpfs out/rk3568/.tmp # 在GN配置中重定向临时文件 export TMPDIRout/rk3568/.tmp经过这些优化我的开发环境从频繁报磁盘空间不足到现在可以保持3个不同版本的编译产出同时存在。最实用的发现是定期执行find out -type f -size 100M找出异常大文件往往能意外发现可以清理的测试日志或冗余备份。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2475053.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!