花粉乐分享平台宣传视频
> 华为资讯 > 华为资讯 > 鸿蒙编程 > 鸿蒙 OpenHarmony-2.0-Canary 编译构建流程
鸿蒙 OpenHarmony-2.0-Canary 编译构建流程
来源:亮子力
2022-12-02 14:15:36
557
管理

2021.06.17 @亮子力

OpenHarmony-2.0-Canary

2.0版本的编译发生了很大的变化,由hb命令,变成了build.sh。经过分析发现,build.sh也是调用各种的python脚本来进行构建。这样看来1.1.0用json写配置,用python的 hb 解析,再调用gn、NINJA来执行编译构建反而更简单了。估计下个版本还会改,我估计会统一成hb命令。

所以这次先简单分析下。

./build.sh --product-name Hi3516DV300

-x #回显参数和命令-v #回显执行的源码打开 OpenHarmonybuildbuild_scripts 下的 build.sh、build_common.sh、build_ohos.sh、build_standard.sh、parse_params.sh将set -e 改为 set -exv 开启调试模式

build.sh

加了调试参数,我们来分析下 build.sh 在编译构建中做了什么。

# 各种判断和获取参数# preloader 一.预加载${PYTHON3} ${source_root_dir}/build/loader/preloader/preloader.py --product-name ${product_name} --source-root-dir ${source_root_dir} --products-config-dir "productdefine/common/products" --preloader-output-root-dir "out/build_configs" # 设置环境变量source ${source_root_dir}/out/build_configs/${product_name}/preloader/build.prop# source /home/bright/OpenHarmony/out/build_configs/Hi3516DV300/preloader/build.prop​# call build 二.编译构建${source_root_dir}/build/build_scripts/build_${system_type}.sh --product-name ${product_name} --device-name ${device_name} --target-os ${target_os} --target-cpu ${target_cpu} ${build_params}

一.预加载

debug的方法,用单步调试来看看这个 preloader.py 的作用。

调试参数:

{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "preloader.py", "type": "python", "request": "launch", "program": "./build/loader/preloader/preloader.py", "console": "integratedTerminal", "args": [ "--product-name","Hi3516DV300", "--source-root-dir","", "--products-config-dir","productdefine/common/products", "--preloader-output-root-dir","out/build_configs" ], "stopOnEntry": true } ]}

调用了2个python文件,Z:OpenHarmonybuildloaderpreloaderpreloader.py 和 Z:OpenHarmonybuildscriptsutilfile_utils.py

这个函数有4个参数。

python3 build/loader/preloader/preloader.py --product-name Hi3516DV300 --source-root-dir "" --products-config-dir productdefine/common/products --preloader-output-root-dir out/build_configs​Z:OpenHarmonybuildloaderpreloaderpreloader.py:180# 建议断点打在这,跳过importparser = argparse.ArgumentParser()

全部操作主要就是def _run(args):这一个函数

Z:OpenHarmonybuildloaderpreloaderpreloader.py:133def _run(args): # 忽略不重要的步骤,直接看核心部分 # 生成 out/build_configs/Hi3516DV300/preloader/parts.json write_json_file(parts_info_file, parts_config_info)​ # 获取 OpenHarmony/build/loader/preloader/platforms.template 这个模板 platforms_template_file = _get_platform_template_file(args.source_root_dir) # 复制 OpenHarmonyoutbuild_configsstandard_systemplatforms.build _copy_platforms_config(platforms_template_file, parts_info_file, platform_config_output_path)​ _build_info_list = [] build_info_file = os.path.join(product_info_output_path, 'build.prop') for k, v in build_configs.items(): _build_info_list.append('{}={}'.format(k, v)) # 生成 out/build_configs/Hi3516DV300/preloader/build.prop write_file(build_info_file, 'n'.join(_build_info_list))

简单来说就是通过产品形态配置仓调取3个json文件 1个platforms.template,生成3个配置文件

产品形态配置仓调取3个json文件,具体可以参考:https://gitee.com/openharmony/productdefine_common

配置文件:productdefine/common├── base # 不同系统类型的最小系统,开发者不用配置,系统提供│ └── standard_system.json├── device # device配置,配置文件按照device name命名│ └── hi3516dv300.json└── products # 产品配置,配置文件按照product name命名 └── Hi3516DV300.json​输出文件:├── Hi3516DV300│ └── preloader│ ├── build.prop│ └── parts.json└── standard_system └── platforms.build

来个更直观的对比图吧。

二.编译构建 build_standard.sh

这个脚本有2个任务:

准备好参数执行gn、ninja构建命令。将编译好的文件打包成镜像。

build/build_scripts/build_standard.sh --product-name Hi3516DV300 --device-name hi3516dv300 --target-os ohos --target-cpu arm# 换个姿势,方便查看build_standard.sh --product-name Hi3516DV300 --device-name hi3516dv300 --target-os ohos --target-cpu arm

接下来先分析下 build_standard.sh

Z:OpenHarmonybuildbuild_scriptsbuild_standard.sh​# 忽略不重要的步骤,直接看核心部分​function main() { # build ohosdo_make_ohos # 这个函数在 OpenHarmonybuildbuild_scriptsbuild_common.sh 文件中。 # 而最终这个函数会生成,下面这条构建脚本,主要的编译工作都是由 build_ohos.sh 来完成的。 build/build_scripts/build_ohos.sh device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true ​... ...​ # build imagesbuild/adapter/images/build_image.sh --device-name ${device_name} --ohos-build-out-dir ${ohos_build_root_dir}/packages/phone # 第二部分重要工作是生成镜像。参考:2.【生成镜像】 build/adapter/images/build_image.sh --device-name hi3516dv300 --ohos-build-out-dir /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone}

1.build_ohos.sh【编译构建】

这个脚本的结构就简单了

参数初始化执行编译构建gn、ninjia统计分析结果

build/build_scripts/build_ohos.sh device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true​# 忽略不重要的步骤,直接看核心部分​main(){ source ${BUILD_SCRIPT_DIR}/pre_process.sh pre_process "$@" # 再执行a.参数初始化​ source ${BUILD_SCRIPT_DIR}/make_main.sh do_make "$@" # 再执行b.Gn和ninja的命令都是在这个脚本执行​ source ${BUILD_SCRIPT_DIR}/post_process.sh post_process "$@" # 再执行c.构建完成之后进行的收尾工作 gn_args=is_standard_system=true exit $RET}​main "$@"================================================================================================================================【参数设置】 BIN_PATH=/home/bright/OpenHarmony/build/build_scripts BASE_HOME=/home/bright/OpenHarmony BUILD_SCRIPT_DIR=/home/bright/OpenHarmony/build/core/build_scripts​【脚本执行】 pre_process device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true main device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true post_process device_type=Hi3516DV300 target_os=ohos target_cpu=arm

a.pre_process.sh

对各种参数进行初始化

pre_process(){ echo "pre_process" case $(uname -s) in Darwin) HOST_DIR="darwin-x86" HOST_OS="mac" ;; Linux) HOST_DIR="linux-x86" HOST_OS="linux" ;; *) echo "Unsupported host platform: $(uname -s)" RET=1 exit $RET esac​ export PATH=${BASE_HOME}/prebuilts/python/${HOST_DIR}/3.8.5/bin:${BASE_HOME}/prebuilts/build-tools/${HOST_DIR}/bin:$PATH python --version​# 初始化了4个脚本,对参数进行初始化,这块先不展开了,下个版本不改再来分析 source ${BUILD_SCRIPT_DIR}/init_parameters.sh # 给参数赋值source ${BUILD_SCRIPT_DIR}/parse_cmdline.sh source ${BUILD_SCRIPT_DIR}/common_fun.sh source ${BUILD_SCRIPT_DIR}/trap_ctrlc.sh​ init_parameter "$@" # 这个脚本没啥好说的,就是参数赋值 parse_cmdline "$@" # 解析命令行 # Trap SIGINT trap "trap_ctrlc" 2​ if [ "${PYCACHE_ENABLE}" == true ];then source ${BUILD_SCRIPT_DIR}/set_pycache.sh set_pycache fi}================================================================================================================================【生成环境变量】 export PATH=/home/bright/OpenHarmony/prebuilts/python/linux-x86/3.8.5/bin:/home/bright/OpenHarmony/prebuilts/build-tools/linux-x86/bin: /home/bright/.local/bin:/home/bright/OpenHarmony/prebuilts/build-tools/common/nodejs/node-v12.18.4-linux-x64/bin:/home/bright/.local/bin: /home/bright/.local/bin:/home/bright/developtools:/home/bright/developtools/xpack-openocd-0.10.0-15/bin:/home/bright/developtools/gcc-lin aro-arm-linux-gnueabihf-4.9-2014.07_linux/bin:/home/bright/developtools/gcc_riscv32/bin:/home/bright/developtools/hc-gen:/home/bright/dev eloptools/llvm/bin:/home/bright/developtools/ninja:/home/bright/developtools/gn:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/ bin:/usr/games:/usr/local/games:/snap/bin【执行脚本】 init_parameter device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true parse_cmdline device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true trap trap_ctrlc 2 # trap运行 trap_ctrlc 脚本。TODO

b.make_main.sh丨gn、ninja

【重点】来看这个脚本,Gn和ninja的命令都是在这个脚本执行

参数: device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true

buildcorebuild_scriptsmake_main.sh​do_make(){ TARGET_OUT_DIR=${BASE_HOME}/${OUT_DIR}/${TARGET_OS}-${TARGET_ARCH}-${BUILD_VARIANT} # 设置输出目录# 忽略不重要的步骤,直接看核心部分​ # prepare to save build log LOG_FILE=${TARGET_OUT_DIR}/build.log log_prepare $LOG_FILE # 生成编译构建的log文件,OpenHarmony/out/ohos-arm-release/build.log log "$@"​ BEGIN_TIME=$(date " %s") # 记录当前时间​ source ${BUILD_SCRIPT_DIR}/get_gn_parameters.sh get_gn_parameters # 这个脚本用来获取gn的参数​ if [ "${SKIP_GN_PARSE}"x = falsex ]; then # 这里执行了gn命令,并将过程写入log文件,参考下面【gn命令】 ${BUILD_TOOLS_DIR}/gn gen ${TARGET_OUT_DIR} --args="target_os="${TARGET_OS}" target_cpu="${TARGET_ARCH}" is_debug=false device_type="${DEVICE_TYPE}" is_component_build=true use_custom_libcxx=true ${GN_ARGS} ${TEST_BUILD_PARA_STRING} ${IS_ASAN} release_test_suite=${RELEASE_TEST_SUITE}" 2>&1 | tee -a $log​ # 忽略部分代码,到这里脚本调用了gn,这部分的内容是gn命令产生的,可以在OpenHarmony/out/ohos-arm-release/build.log中找到​ log "Starting Ninja..." NINJA_START_TIME=$(date %s%N) echo python version: $(python --version) ninja_build_args="--source-root-dir ${BASE_HOME} --root-build-dir ${TARGET_OUT_DIR} # 设置ninja的参数 --build-target-name ${BUILD_TARGET_NAME}" if [ "${TARGET_PLATFORM}" != "" ];then ninja_build_args="$ninja_build_args --target-platform ${TARGET_PLATFORM}" fi # 在执行ninja命令前,还得调用一个python脚本,参考:【构建目标处理程序】 real_build_target=$(python ${BASE_HOME}/build/scripts/build_target_handler.py $ninja_build_args) echo "build_target: "$real_build_target​ if [ "${USE_NARUTO}"x = "truex" ];then ${BUILD_TOOLS_DIR}/naruto -d keepdepfile -p ${BASE_HOME}/.naruto_cache -C ${TARGET_OUT_DIR} ${real_build_target} ${NINJA_ARGS} 2>&1 | tee -a $log else # 整个构建脚本最核心的部分,此时构建脚本全部交由ninja处理,打印编译信息,将结果写入log。参考:【ninja命令】 ${BUILD_TOOLS_DIR}/ninja -d keepdepfile -C ${TARGET_OUT_DIR} ${real_build_target} ${NINJA_ARGS} 2>&1 | tee -a $log fi​ # 忽略部分代码}================================================================================================================================【gn命令】 /home/bright/OpenHarmony/prebuilts/build-tools/linux-x86/bin/gn gen /home/bright/OpenHarmony/out/ohos-arm-release '--args=target_os="ohos" target_cpu="arm" is_debug=false device_type="Hi3516DV300" is_component_build=true use_custom_libcxx=true is_standard_system=true release_test_suite=false'​​【ninja参数】 ninja_build_args='--source-root-dir /home/bright/OpenHarmony --root-build-dir /home/bright/OpenHarmony/out/ohos-arm-release --build-target-name packages'​【构建目标处理程序】 python /home/bright/OpenHarmony/build/scripts/build_target_handler.py --source-root-dir /home/bright/OpenHarmony --root-build-dir /home/bright/OpenHarmony/out/ohos-arm-release --build-target-name packages【ninja命令】 ninja -d keepdepfile -C /home/bright/OpenHarmony/out/ohos-arm-release packages

c.post_process.sh

构建完成之后进行的收尾工作。

参数:device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true

buildcorebuild_scriptspost_process.sh​# 忽略统计时间、pycache等部分代码,总结下来就是执行了几个python脚本​【这个python脚本,生成 sorted_action_duration.txt 排序构建各个模块的操作时间】 python3 /home/bright/OpenHarmony/build/scripts/ninja2trace.py --ninja-log /home/bright/OpenHarmony/out/ohos-arm-release/.ninja_log --trace-file /home/bright/OpenHarmony/out/ohos-arm-release/build.trace --ninja-start-time 1623461510200574308 --duration-file /home/bright/OpenHarmony/out/ohos-arm-release/sorted_action_duration.txt​【计算C目标重叠率统计】 python3 /home/bright/OpenHarmony/build/ohos/statistics/build_overlap_statistics.py --build-out-dir /home/bright/OpenHarmony/out/ohos-arm-release --subsystem-config-file /home/bright/OpenHarmony/build/subsystem_config.json --root-source-dir /home/bright/OpenHarmony 【获取构建警告列表】 python3 /home/bright/OpenHarmony/build/scripts/get_warnings.py --build-log-file /home/bright/OpenHarmony/out/ohos-arm-release/build.log --warning-out-file /home/bright/OpenHarmony/out/ohos-arm-release/packages/WarningList.txt

2.build_image.sh【生成镜像】

这个脚本的主要工作

复制 root 目录生成镜像

build/adapter/images/build_image.sh --device-name hi3516dv300 --ohos-build-out-dir /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone... ...prepare_root # a.复制 root 目录build_vendro_image # b.生成 vendr.imagebuild_system_image # c.生成 system.imagebuild_userdata_image # d.生成 userdata.image​if [[ "${device_name}" == "hi3516dv300" ]]; then source ${OHOS_ROOT_PATH}/build/adapter/images/updater/build_updater_image.shfi

a.复制 root 目录

function prepare_root() { if [[ -d "${ohos_build_out_dir}/images/root" ]]; then rm -rf ${ohos_build_out_dir}/images/root fi cp -arf prebuilts/aosp_prebuilt_libs/minisys/root ${ohos_build_out_dir}/images/ local dir_list=(acct apex cache config data debug_ramdisk dev mnt oem proc sbin storage sys system vendor) pushd ${ohos_build_out_dir}/images/root # 【pushd 把当前工作目录压栈,成为栈顶】 for _path in ${dir_list[@]} do if [[ ! -d "${_path}" ]]; then mkdir ${_path} # 【新建 dir_list 里的目录】 fi done popd # 【popd 将目录弹出目录栈】}================================================================================================================================【复制root过来】cp -arf prebuilts/aosp_prebuilt_libs/minisys/root /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/【然后新建下面列表的文件夹】(acct apex cache config data debug_ramdisk dev mnt oem proc sbin storage sys system vendor)

b.生成 vendr.image

function build_vendro_image() { cp -arf prebuilts/aosp_prebuilt_libs/minisys/vendor ${ohos_build_out_dir}/images/ if [[ -d "${ohos_build_out_dir}/vendor" ]]; then cp -arf ${ohos_build_out_dir}/vendor/* ${ohos_build_out_dir}/images/vendor/ fi # remove img rm -rf ${ohos_build_out_dir}/images/vendor.img # build system image PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:$PATH prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py ${ohos_build_out_dir}/images/vendor prebuilts/aosp_prebuilt_libs/minisys/vendor_image_info.txt ${ohos_build_out_dir}/images/vendor.img ${ohos_build_out_dir}/images/system if [[ "${PIPESTATUS[0]}" -ne 0 ]]; then echo "033[31m build: build vendor image error.033[0m" exit 1 fi echo -e "033[32m build vendor image successful.033[0m"}================================================================================================================================【vendor的来源有两个】# 1.prebuilts/aosp_prebuilt_libs/minisys/vendor# 2.out/ohos-arm-release/packages/phone/vendor cp -arf prebuilts/aosp_prebuilt_libs/minisys/vendor /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/ cp -arf /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/vendor/* /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/vendor/【设置环境变量】PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:/home/bright/.local/bin:/home/bright/OpenHarmony/prebuilts/build-tools/common/nodejs/node-v12.18.4-linux-x64/bin:/home/bright/.local/bin:/home/bright/.local/bin:/home/bright/developtools:/home/bright/developtools/xpack-openocd-0.10.0-15/bin:/home/bright/developtools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin:/home/bright/developtools/gcc_riscv32/bin:/home/bright/developtools/hc-gen:/home/bright/developtools/llvm/bin:/home/bright/developtools/ninja:/home/bright/developtools/gn:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin【生成镜像】 prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/vendor prebuilts/aosp_prebuilt_libs/minisys/vendor_image_info.txt /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/vendor.img /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system

c.生成 system.image

function _update_build_prop() { local system_build_prop_file=${ohos_build_out_dir}/images/system/build.prop local ohos_build_prop_file=${OHOS_ROOT_PATH}/build/adapter/makefiles/ohos_system.prop if [[ -f "${ohos_build_prop_file}" ]] && [[ -f "${system_build_prop_file}" ]]; then echo '' >> ${system_build_prop_file} cat ${ohos_build_prop_file} >> ${system_build_prop_file} fi}​function build_system_image() { if [[ ! -d "${ohos_build_out_dir}/images" ]]; then mkdir ${ohos_build_out_dir}/images fi cp -arf prebuilts/aosp_prebuilt_libs/minisys/system ${ohos_build_out_dir}/images/ cp -arf ${ohos_build_out_dir}/system/* ${ohos_build_out_dir}/images/system/ # update build.prop _update_build_prop # remove img rm -rf ${ohos_build_out_dir}/images/system.img # build system image PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:$PATH prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py ${ohos_build_out_dir}/images/system prebuilts/aosp_prebuilt_libs/minisys/system_image_info.txt ${ohos_build_out_dir}/images/system.img ${ohos_build_out_dir}/images/system if [[ "${PIPESTATUS[0]}" -ne 0 ]]; then echo "033[31m build: build system image error.033[0m" exit 1 fi echo -e "033[32m build system image successful.033[0m"}================================================================================================================================【local命令用于在函数内定义局部变量】 local system_build_prop_file=/home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system/build.prop local ohos_build_prop_file=/build/adapter/makefiles/ohos_system.prop【system的来源也有2个】# 1.prebuilts/aosp_prebuilt_libs/minisys/system# 2.out/ohos-arm-release/packages/phone/systemcp -arf prebuilts/aosp_prebuilt_libs/minisys/system /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/cp -arf /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/system/* /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system/ 【环境变量】PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:/home/bright/.local/bin:/home/bright/OpenHarmony/prebuilts/build-tools/common/nodejs/node-v12.18.4-linux-x64/bin:/home/bright/.local/bin:/home/bright/.local/bin:/home/bright/developtools:/home/bright/developtools/xpack-openocd-0.10.0-15/bin:/home/bright/developtools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin:/home/bright/developtools/gcc_riscv32/bin:/home/bright/developtools/hc-gen:/home/bright/developtools/llvm/bin:/home/bright/developtools/ninja:/home/bright/developtools/gn:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin【镜像生成】prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system prebuilts/aosp_prebuilt_libs/minisys/system_image_info.txt /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system.img /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system

d.生成 userdata.image

function build_userdata_image() { if [[ -d "${ohos_build_out_dir}/images/data" ]]; then rm -rf ${ohos_build_out_dir}/images/data fi mkdir ${ohos_build_out_dir}/images/data # build userdat image PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:$PATH prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py ${ohos_build_out_dir}/images/data prebuilts/aosp_prebuilt_libs/minisys/userdata_image_info.txt ${ohos_build_out_dir}/images/userdata.img ${ohos_build_out_dir}/images/system if [[ "${PIPESTATUS[0]}" -ne 0 ]]; then echo "033[31m build: build userdata image error.033[0m" exit 1 fi echo -e "033[32m build userdata image successful.033[0m"}================================================================================================================================【新建data目录】out/ohos-arm-release/packages/phone/images/data【环境变量】PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:/home/bright/.local/bin:/home/bright/OpenHarmony/prebuilts/build-tools/common/nodejs/node-v12.18.4-linux-x64/bin:/home/bright/.local/bin:/home/bright/.local/bin:/home/bright/developtools:/home/bright/developtools/xpack-openocd-0.10.0-15/bin:/home/bright/developtools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin:/home/bright/developtools/gcc_riscv32/bin:/home/bright/developtools/hc-gen:/home/bright/developtools/llvm/bin:/home/bright/developtools/ninja:/home/bright/developtools/gn:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin【镜像生成】prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/data prebuilts/aosp_prebuilt_libs/minisys/userdata_image_info.txt /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/userdata.img /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system

3.关于build_image.py

这个python脚本多次被调用,如果下次版本升级还用它,我们再来深挖一下,这次先放他一马。

prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py

properties_filebuild_image.py [输入目录] [属性文件] [输出文件] [输出录了]in_dir = argv[0]glob_dict_file = argv[1]out_file = argv[2]target_out = argv[3]

花粉社群VIP加油站

1
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与花粉乐分享无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
凡本网注明 “来源:XXX(非花粉乐分享)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。
QQ:2443165046 邮箱:info@hflfx.com
关于作者
黛末(采蜜高手)
文章
534
主题
0
关注
0
粉丝
0
点击领取今天的签到奖励!
签到排行
随手拍
54个圈友 0个话题
华为手机随手拍,记录生活点滴之美好
华为P30pro
51个圈友 0个话题
这里是华为P30pro手机交流圈,欢迎华为P30pro用户进群交流
体验官
60个圈友 2个话题
华为花粉体验官,体验官专属的交流群
登录后查看您创建的圈子
登录后查看您创建的圈子
所有圈子
杭州互联网违法和不良信息举报平台 网络110报警服务 浙ICP备17046585号
1
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索