修改AOSP根路径后如何重新编译源码并复用原有编译产物
AOSP迁移路径后复用原有编译产物方案
问题根因
安卓10+采用的Soong/Blueprint/Ninja构建体系会将源码的绝对路径硬编码到构建元数据文件中,源码路径变更后元数据与实际路径不匹配,就会触发大量编译错误。无需全量删除out目录下所有产物,仅需删除包含路径信息的元数据文件即可复用绝大多数编译结果。
具体操作步骤
- 首先进入新的源码根目录,初始化构建环境:
cd /home/myaccount/clone-android source build/envsetup.sh lunch <你原有编译使用的目标产品名,如aosp_arm64-userdebug>
- 删除包含绝对路径的构建元数据,执行以下命令:
# 删除out目录下的构建配置文件 rm -rf out/soong out/*.ninja out/.ninja* out/kati # 删除源码根目录下的构建缓存 rm -rf .soong .out-dir .bootstrap build/soong/.bootstrap build/blueprint/.bootstrap # 安卓12及以上版本额外执行以下命令 rm -rf out/metadata
- 执行常规编译命令即可:
m -j$(nproc)
效果说明
上述操作仅删除了路径关联的构建规则文件,所有已编译生成的二进制文件、库文件、资源产物都会被保留,构建系统会自动校验产物时间戳进行复用,整体编译耗时仅比增量编译多5%~15%,远低于全量编译耗时。
注意事项
- 如果之前编译时自定义了
OUT_DIR环境变量指定到了源码外的路径,需要同步删除自定义OUT_DIR路径下的soong、ninja相关元数据文件 - 若操作后仍有少量路径相关错误,可额外执行
rm -rf out/*/misc删除零散路径缓存即可解决
内容的提问来源于stack exchange,提问作者OfusJK
相关产品推荐
相关产品推荐

