精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OpenHarmony-2.0-Canary 編譯構建流程

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[407354]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

OpenHarmony-2.0-Canary

2.0版本的編譯發生了很大的變化,由hb命令,變成了build.sh。經過分析發現,build.sh也是調用各種的python腳本來進行構建。這樣看來1.1.0用json寫配置,用python的 hb 解析,再調用gn、ninja來執行編譯構建反而更簡單了。估計下個版本還會改,我估計會統一成hb命令。

所以這次先簡單分析下。

  1. -x      #回顯參數和命令 
  2. -v      #回顯執行的源碼 
  3. 打開 OpenHarmony\build\build_scripts 下的 build.sh、build_common.sh、build_ohos.sh、build_standard.sh、parse_params.sh 
  4. set -e 改為 set -exv 開啟調試模式 

build.sh

加了調試參數,我們來分析下 build.sh 在編譯構建中做了什么。

  1. # 各種判斷和獲取參數 
  2.  
  3. # preloader 一.預加載 
  4. ${PYTHON3} ${source_root_dir}/build/loader/preloader/preloader.py \ 
  5.   --product-name ${product_name} \ 
  6.   --source-root-dir ${source_root_dir} \ 
  7.   --products-config-dir "productdefine/common/products" \ 
  8.   --preloader-output-root-dir "out/build_configs" 
  9.    
  10. # 設置環境變量 
  11. source ${source_root_dir}/out/build_configs/${product_name}/preloader/build.prop 
  12. # source /home/bright/OpenHarmony/out/build_configs/Hi3516DV300/preloader/build.prop 
  13.  
  14. # call build 二.編譯構建 
  15. ${source_root_dir}/build/build_scripts/build_${system_type}.sh \ 
  16.   --product-name ${product_name} \ 
  17.   --device-name ${device_name} \ 
  18.   --target-os ${target_os} \ 
  19.   --target-cpu ${target_cpu} \ 
  20.   ${build_params} 

一、預加載

debug的方法,用單步調試來看看這個 preloader.py 的作用。

調試參數:

  1.     // 使用 IntelliSense 了解相關屬性。  
  2.     // 懸停以查看現有屬性的描述。 
  3.     // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 
  4.     "version""0.2.0"
  5.     "configurations": [ 
  6.         { 
  7.             "name""preloader.py"
  8.             "type""python"
  9.             "request""launch"
  10.             "program""./build/loader/preloader/preloader.py"
  11.             "console""integratedTerminal"
  12.             "args": [ 
  13.                 "--product-name","Hi3516DV300"
  14.                 "--source-root-dir",""
  15.                 "--products-config-dir","productdefine/common/products"
  16.                 "--preloader-output-root-dir","out/build_configs" 
  17.             ], 
  18.             "stopOnEntry"true 
  19.         } 
  20.     ] 

調用了2個python文件,Z:\OpenHarmony\build\loader\preloader\preloader.py 和 Z:\OpenHarmony\build\scripts\util\file_utils.py

這個函數有4個參數。

  1. python3 build/loader/preloader/preloader.py \ 
  2.     --product-name Hi3516DV300 \ 
  3.     --source-root-dir "" \ 
  4.     --products-config-dir productdefine/common/products \ 
  5.     --preloader-output-root-dir out/build_configs 
  6.  
  7. Z:\OpenHarmony\build\loader\preloader\preloader.py:180 
  8. # 建議斷點打在這,跳過import 
  9. parser = argparse.ArgumentParser() 

全部操作主要就是def _run(args):這一個函數

  1. Z:\OpenHarmony\build\loader\preloader\preloader.py:133 
  2. def _run(args): 
  3.     # 忽略不重要的步驟,直接看核心部分 
  4.      
  5.     # 生成 out/build_configs/Hi3516DV300/preloader/parts.json 
  6.     write_json_file(parts_info_file, parts_config_info) 
  7.  
  8.     # 獲取 OpenHarmony/build/loader/preloader/platforms.template 這個模板 
  9.     platforms_template_file = _get_platform_template_file(args.source_root_dir) 
  10.      
  11.     # 復制 OpenHarmony\out\build_configs\standard_system\platforms.build 
  12.     _copy_platforms_config(platforms_template_file, parts_info_file, 
  13.                            platform_config_output_path) 
  14.  
  15.     _build_info_list = [] 
  16.     build_info_file = os.path.join(product_info_output_path, 'build.prop'
  17.     for k, v in build_configs.items(): 
  18.         _build_info_list.append('{}={}'.format(k, v)) 
  19.      
  20.     # 生成 out/build_configs/Hi3516DV300/preloader/build.prop 
  21.     write_file(build_info_file, '\n'.join(_build_info_list)) 

簡單來說就是通過產品形態配置倉調取3個json文件+1個platforms.template,生成3個配置文件

產品形態配置倉調取3個json文件,具體可以參考:https://gitee.com/openharmony/productdefine_common

配置文件:

  1. 配置文件: 
  2. productdefine/common 
  3. ├── base                         # 不同系統類型的最小系統,開發者不用配置,系統提供 
  4. │   └── standard_system.json 
  5. ├── device                       # device配置,配置文件按照device name命名 
  6. │   └── hi3516dv300.json 
  7. └── products                     # 產品配置,配置文件按照product name命名 
  8.     └── Hi3516DV300.json 
  9.  
  10. 輸出文件: 
  11. ├── Hi3516DV300 
  12. │   └── preloader 
  13. │       ├── build.prop 
  14. │       └── parts.json 
  15. └── standard_system 
  16.     └── platforms.build 

 來個更直觀的對比圖吧。

二、編譯構建 build_standard.sh

這個腳本有2個任務:

準備好參數執行gn、ninja構建命令。

將編譯好的文件打包成鏡像。

  1. build/build_scripts/build_standard.sh --product-name Hi3516DV300 --device-name hi3516dv300 --target-os ohos --target-cpu arm 
  2. # 換個姿勢,方便查看 
  3. build_standard.sh  
  4.     --product-name Hi3516DV300  
  5.     --device-name hi3516dv300  
  6.     --target-os ohos  
  7.     --target-cpu arm 

接下來先分析下 build_standard.sh

  1. Z:\OpenHarmony\build\build_scripts\build_standard.sh 
  2.  
  3. # 忽略不重要的步驟,直接看核心部分 
  4.  
  5. function main() { 
  6.   # build ohos 
  7.   do_make_ohos  # 這個函數在 OpenHarmony\build\build_scripts\build_common.sh 文件中。 
  8.   # 而最終這個函數會生成,下面這條構建腳本,主要的編譯工作都是由 build_ohos.sh 來完成的。 
  9. + build/build_scripts/build_ohos.sh device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true   
  10.  
  11.   ... ... 
  12.  
  13.   # build images 
  14.   build/adapter/images/build_image.sh --device-name ${device_name} \ 
  15.     --ohos-build-out-dir ${ohos_build_root_dir}/packages/phone 
  16.   # 第二部分重要工作是生成鏡像。參考:2.【生成鏡像】 
  17. + 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【編譯構建】

這個腳本的結構就簡單了

  1. 參數初始化
  2. 執行編譯構建gn、ninjia
  3. 統計分析結果
  1. build/build_scripts/build_ohos.sh  
  2.     device_type=Hi3516DV300  
  3.     target_os=ohos  
  4.     target_cpu=arm  
  5.     gn_args=is_standard_system=true 
  6.  
  7. # 忽略不重要的步驟,直接看核心部分 
  8.  
  9. main() 
  10.     source ${BUILD_SCRIPT_DIR}/pre_process.sh 
  11.     pre_process "$@" # 再執行a.參數初始化 
  12.  
  13.     source ${BUILD_SCRIPT_DIR}/make_main.sh 
  14.     do_make "$@" # 再執行b.Gn和ninja的命令都是在這個腳本執行 
  15.  
  16.     source ${BUILD_SCRIPT_DIR}/post_process.sh 
  17.     post_process "$@" # 再執行c.構建完成之后進行的收尾工作 
  18.      
  19. gn_args=is_standard_system=true 
  20.     exit $RET 
  21.  
  22. main "$@" 
  23. ================================================================================================================================ 
  24. 【參數設置】 
  25. + BIN_PATH=/home/bright/OpenHarmony/build/build_scripts 
  26. + BASE_HOME=/home/bright/OpenHarmony 
  27. + BUILD_SCRIPT_DIR=/home/bright/OpenHarmony/build/core/build_scripts 
  28.  
  29. 【腳本執行】 
  30. + pre_process device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true 
  31. + main device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true 
  32. + post_process device_type=Hi3516DV300 target_os=ohos target_cpu=arm  

a.pre_process.sh

對各種參數進行初始化

  1. pre_process() 
  2.     echo "pre_process" 
  3.     case $(uname -s) in 
  4.         Darwin) 
  5.             HOST_DIR="darwin-x86" 
  6.             HOST_OS="mac" 
  7.             ;; 
  8.         Linux) 
  9.             HOST_DIR="linux-x86" 
  10.             HOST_OS="linux" 
  11.             ;; 
  12.         *) 
  13.             echo "Unsupported host platform: $(uname -s)" 
  14.             RET=1 
  15.             exit $RET 
  16.     esac 
  17.  
  18.     export PATH=${BASE_HOME}/prebuilts/python/${HOST_DIR}/3.8.5/bin:${BASE_HOME}/prebuilts/build-tools/${HOST_DIR}/bin:$PATH 
  19.     python --version 
  20.  
  21.     # 初始化了4個腳本,對參數進行初始化,這塊先不展開了,下個版本不改再來分析 
  22.     source ${BUILD_SCRIPT_DIR}/init_parameters.sh # 給參數賦值 
  23.     source ${BUILD_SCRIPT_DIR}/parse_cmdline.sh 
  24.     source ${BUILD_SCRIPT_DIR}/common_fun.sh 
  25.     source ${BUILD_SCRIPT_DIR}/trap_ctrlc.sh 
  26.  
  27.     init_parameter "$@" # 這個腳本沒啥好說的,就是參數賦值 
  28.     parse_cmdline "$@"  # 解析命令行 
  29.     # Trap SIGINT 
  30.     trap "trap_ctrlc" 2 
  31.  
  32.     if [ "${PYCACHE_ENABLE}" == true ];then 
  33.         source ${BUILD_SCRIPT_DIR}/set_pycache.sh 
  34.         set_pycache 
  35.     fi 
  36. ================================================================================================================================ 
  37. 【生成環境變量】 
  38. + 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 
  39. 【執行腳本】 
  40. + init_parameter device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true 
  41. + parse_cmdline device_type=Hi3516DV300 target_os=ohos target_cpu=arm gn_args=is_standard_system=true 
  42. + 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

  1. build\core\build_scripts\make_main.sh 
  2.  
  3. do_make() 
  4.     TARGET_OUT_DIR=${BASE_HOME}/${OUT_DIR}/${TARGET_OS}-${TARGET_ARCH}-${BUILD_VARIANT} # 設置輸出目錄 
  5.      
  6.     # 忽略不重要的步驟,直接看核心部分 
  7.  
  8.     # prepare to save build log 
  9.     LOG_FILE=${TARGET_OUT_DIR}/build.log 
  10.     log_prepare $LOG_FILE # 生成編譯構建的log文件,OpenHarmony/out/ohos-arm-release/build.log 
  11.     log "$@" 
  12.  
  13.     BEGIN_TIME=$(date "+%s") # 記錄當前時間 
  14.  
  15.     source ${BUILD_SCRIPT_DIR}/get_gn_parameters.sh 
  16.     get_gn_parameters # 這個腳本用來獲取gn的參數 
  17.  
  18.     if [ "${SKIP_GN_PARSE}"x = falsex ]; then # 這里執行了gn命令,并將過程寫入log文件,參考下面【gn命令】 
  19.         ${BUILD_TOOLS_DIR}/gn gen ${TARGET_OUT_DIR} \ 
  20.             --args="target_os=\"${TARGET_OS}\" target_cpu=\"${TARGET_ARCH}\" is_debug=false \ 
  21.             device_type=\"${DEVICE_TYPE}\" is_component_build=true use_custom_libcxx=true \ 
  22.             ${GN_ARGS} ${TEST_BUILD_PARA_STRING}  ${IS_ASAN} \ 
  23.             release_test_suite=${RELEASE_TEST_SUITE}" 2>&1 | tee -a $log 
  24.  
  25.         # 忽略部分代碼,到這里腳本調用了gn,這部分的內容是gn命令產生的,可以在OpenHarmony/out/ohos-arm-release/build.log中找到 
  26.  
  27.     log "Starting Ninja..." 
  28.     NINJA_START_TIME=$(date +%s%N) 
  29.     echo python version: $(python --version) 
  30.     ninja_build_args="--source-root-dir ${BASE_HOME} --root-build-dir ${TARGET_OUT_DIR} \ # 設置ninja的參數 
  31.             --build-target-name ${BUILD_TARGET_NAME}" 
  32.     if [ "${TARGET_PLATFORM}" != "" ];then 
  33.         ninja_build_args="$ninja_build_args --target-platform ${TARGET_PLATFORM}" 
  34.     fi 
  35.     # 在執行ninja命令前,還得調用一個python腳本,參考:【構建目標處理程序】 
  36.     real_build_target=$(python ${BASE_HOME}/build/scripts/build_target_handler.py $ninja_build_args) 
  37.     echo "build_target: "$real_build_target 
  38.  
  39.     if [ "${USE_NARUTO}"x = "truex" ];then 
  40.         ${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 
  41.     else 
  42.         # 整個構建腳本最核心的部分,此時構建腳本全部交由ninja處理,打印編譯信息,將結果寫入log。參考:【ninja命令】 
  43.         ${BUILD_TOOLS_DIR}/ninja -d keepdepfile -C ${TARGET_OUT_DIR} ${real_build_target} ${NINJA_ARGS} 2>&1 | tee -a $log 
  44.     fi 
  45.  
  46.     # 忽略部分代碼 
  47. ================================================================================================================================ 
  48. 【gn命令】 
  49. + /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' 
  50.  
  51.  
  52. 【ninja參數】 
  53. + ninja_build_args='--source-root-dir /home/bright/OpenHarmony --root-build-dir /home/bright/OpenHarmony/out/ohos-arm-release --build-target-name packages' 
  54.  
  55. 【構建目標處理程序】 
  56. + python /home/bright/OpenHarmony/build/scripts/build_target_handler.py \ 
  57.     --source-root-dir /home/bright/OpenHarmony \ 
  58.     --root-build-dir /home/bright/OpenHarmony/out/ohos-arm-release \ 
  59.     --build-target-name packages 
  60.      
  61. 【ninja命令】 
  62. + 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

  1. build\core\build_scripts\post_process.sh 
  2.  
  3. # 忽略統計時間、pycache等部分代碼,總結下來就是執行了幾個python腳本 
  4.  
  5. 【這個python腳本,生成 sorted_action_duration.txt 排序構建各個模塊的操作時間】 
  6. + python3 /home/bright/OpenHarmony/build/scripts/ninja2trace.py \ 
  7.     --ninja-log /home/bright/OpenHarmony/out/ohos-arm-release/.ninja_log \ 
  8.     --trace-file /home/bright/OpenHarmony/out/ohos-arm-release/build.trace \ 
  9.     --ninja-start-time 1623461510200574308 \ 
  10.     --duration-file /home/bright/OpenHarmony/out/ohos-arm-release/sorted_action_duration.txt 
  11.  
  12. 【計算C目標重疊率統計】                 
  13. + python3 /home/bright/OpenHarmony/build/ohos/statistics/build_overlap_statistics.py \ 
  14.     --build-out-dir /home/bright/OpenHarmony/out/ohos-arm-release \ 
  15.     --subsystem-config-file /home/bright/OpenHarmony/build/subsystem_config.json \ 
  16.     --root-source-dir /home/bright/OpenHarmony 
  17.      
  18. 【獲取構建警告列表】 
  19. + python3 /home/bright/OpenHarmony/build/scripts/get_warnings.py \ 
  20.     --build-log-file /home/bright/OpenHarmony/out/ohos-arm-release/build.log \ 
  21.     --warning-out-file /home/bright/OpenHarmony/out/ohos-arm-release/packages/WarningList.txt 

2.build_image.sh【生成鏡像】

這個腳本的主要工作

  1. 復制 root 目錄
  2. 生成鏡像
  1. build/adapter/images/build_image.sh --device-name hi3516dv300 \ 
  2.     --ohos-build-out-dir /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone 
  3.      
  4.     ... ... 
  5.      
  6. prepare_root # a.復制 root 目錄 
  7. build_vendro_image # b.生成 vendr.image 
  8. build_system_image # c.生成 system.image 
  9. build_userdata_image # d.生成 userdata.image 
  10.  
  11. if [[ "${device_name}" == "hi3516dv300" ]]; then 
  12.     source ${OHOS_ROOT_PATH}/build/adapter/images/updater/build_updater_image.sh 
  13. fi 

a.復制 root 目錄

  1. function prepare_root() { 
  2.     if [[ -d "${ohos_build_out_dir}/images/root" ]]; then 
  3.         rm -rf ${ohos_build_out_dir}/images/root 
  4.     fi 
  5.     cp -arf prebuilts/aosp_prebuilt_libs/minisys/root ${ohos_build_out_dir}/images/ 
  6.     local dir_list=(acct apex cache config data debug_ramdisk dev mnt oem proc sbin storage sys system vendor) 
  7.     pushd ${ohos_build_out_dir}/images/root # 【pushd 把當前工作目錄壓棧,成為棧頂】 
  8.     for _path in ${dir_list[@]} 
  9.     do 
  10.         if [[ ! -d "${_path}" ]]; then 
  11.             mkdir ${_path}  # 【新建 dir_list 里的目錄】 
  12.         fi 
  13.     done 
  14.     popd # 【popd 將目錄彈出目錄棧】 
  15. ================================================================================================================================ 
  16. 【復制root過來】 
  17. cp -arf prebuilts/aosp_prebuilt_libs/minisys/root /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/ 
  18. 【然后新建下面列表的文件夾】 
  19. (acct apex cache config data debug_ramdisk dev mnt oem proc sbin storage sys system vendor) 

b.生成 vendr.image

  1. function build_vendro_image() { 
  2.     cp -arf prebuilts/aosp_prebuilt_libs/minisys/vendor ${ohos_build_out_dir}/images/ 
  3.     if [[ -d "${ohos_build_out_dir}/vendor" ]]; then 
  4.         cp -arf ${ohos_build_out_dir}/vendor/* ${ohos_build_out_dir}/images/vendor/ 
  5.     fi 
  6.     # remove img 
  7.     rm -rf ${ohos_build_out_dir}/images/vendor.img 
  8.     # build system image 
  9.     PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:$PATH prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py \ 
  10.         ${ohos_build_out_dir}/images/vendor \ 
  11.         prebuilts/aosp_prebuilt_libs/minisys/vendor_image_info.txt \ 
  12.         ${ohos_build_out_dir}/images/vendor.img \ 
  13.         ${ohos_build_out_dir}/images/system    
  14.     if [[ "${PIPESTATUS[0]}" -ne 0 ]]; then 
  15.         echo "\033[31m  build: build vendor image error.\033[0m" 
  16.         exit 1 
  17.     fi 
  18.     echo -e "\033[32m  build vendor image successful.\033[0m" 
  19. ================================================================================================================================ 
  20. 【vendor的來源有兩個】 
  21. # 1.prebuilts/aosp_prebuilt_libs/minisys/vendor 
  22. # 2.out/ohos-arm-release/packages/phone/vendor 
  23. + cp -arf prebuilts/aosp_prebuilt_libs/minisys/vendor /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/ 
  24. + cp -arf /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/vendor/* /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/vendor/ 
  25. 【設置環境變量】 
  26. 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 
  27. 【生成鏡像】 
  28. + prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py \ 
  29.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/vendor \ 
  30.     prebuilts/aosp_prebuilt_libs/minisys/vendor_image_info.txt \ 
  31.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/vendor.img \ 
  32.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system    

c.生成 system.image

  1. function _update_build_prop() { 
  2.     local system_build_prop_file=${ohos_build_out_dir}/images/system/build.prop 
  3.     local ohos_build_prop_file=${OHOS_ROOT_PATH}/build/adapter/makefiles/ohos_system.prop    
  4.     if [[ -f "${ohos_build_prop_file}" ]] && [[ -f "${system_build_prop_file}" ]]; then 
  5.         echo '' >> ${system_build_prop_file} 
  6.         cat ${ohos_build_prop_file} >> ${system_build_prop_file} 
  7.     fi 
  8.  
  9. function build_system_image() { 
  10.     if [[ ! -d "${ohos_build_out_dir}/images" ]]; then 
  11.         mkdir ${ohos_build_out_dir}/images 
  12.     fi 
  13.     cp -arf prebuilts/aosp_prebuilt_libs/minisys/system ${ohos_build_out_dir}/images/ 
  14.     cp -arf ${ohos_build_out_dir}/system/* ${ohos_build_out_dir}/images/system/     
  15.     # update build.prop 
  16.     _update_build_prop 
  17.     # remove img 
  18.     rm -rf ${ohos_build_out_dir}/images/system.img 
  19.     # build system image 
  20.     PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:$PATH prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py \ 
  21.         ${ohos_build_out_dir}/images/system \ 
  22.         prebuilts/aosp_prebuilt_libs/minisys/system_image_info.txt \ 
  23.         ${ohos_build_out_dir}/images/system.img \ 
  24.         ${ohos_build_out_dir}/images/system         
  25.     if [[ "${PIPESTATUS[0]}" -ne 0 ]]; then 
  26.         echo "\033[31m  build: build system image error.\033[0m" 
  27.         exit 1 
  28.     fi 
  29.     echo -e "\033[32m  build system image successful.\033[0m" 
  30. ================================================================================================================================ 
  31. local命令用于在函數內定義局部變量】 
  32. local system_build_prop_file=/home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system/build.prop 
  33. local ohos_build_prop_file=/build/adapter/makefiles/ohos_system.prop 
  34. 【system的來源也有2個】 
  35. # 1.prebuilts/aosp_prebuilt_libs/minisys/system 
  36. # 2.out/ohos-arm-release/packages/phone/system 
  37. cp -arf prebuilts/aosp_prebuilt_libs/minisys/system /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/ 
  38. cp -arf /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/system/* /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system/     
  39. 【環境變量】 
  40. 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 
  41. 【鏡像生成】 
  42. prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py \ 
  43.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system \ 
  44.     prebuilts/aosp_prebuilt_libs/minisys/system_image_info.txt \ 
  45.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system.img \ 
  46.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system 

d.生成 userdata.image

  1. function build_userdata_image() { 
  2.     if [[ -d "${ohos_build_out_dir}/images/data" ]]; then 
  3.         rm -rf ${ohos_build_out_dir}/images/data 
  4.     fi 
  5.     mkdir ${ohos_build_out_dir}/images/data 
  6.     # build userdat image 
  7.     PATH=prebuilts/aosp_prebuilt_libs/host_tools/bin:$PATH prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py \ 
  8.         ${ohos_build_out_dir}/images/data \ 
  9.         prebuilts/aosp_prebuilt_libs/minisys/userdata_image_info.txt \ 
  10.         ${ohos_build_out_dir}/images/userdata.img \ 
  11.         ${ohos_build_out_dir}/images/system         
  12.     if [[ "${PIPESTATUS[0]}" -ne 0 ]]; then 
  13.         echo "\033[31m  build: build userdata image error.\033[0m" 
  14.         exit 1 
  15.     fi 
  16.     echo -e "\033[32m  build userdata image successful.\033[0m" 
  17. ================================================================================================================================ 
  18. 【新建data目錄】 
  19. out/ohos-arm-release/packages/phone/images/data 
  20. 【環境變量】 
  21. 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 
  22. 【鏡像生成】 
  23. prebuilts/aosp_prebuilt_libs/host_tools/releasetools/build_image.py \ 
  24.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/data \ 
  25.     prebuilts/aosp_prebuilt_libs/minisys/userdata_image_info.txt \ 
  26.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/userdata.img \ 
  27.     /home/bright/OpenHarmony/out/ohos-arm-release/packages/phone/images/system     

3.關于build_image.py

這個python腳本多次被調用,如果下次版本升級還用它,我們再來深挖一下,這次先放他一馬。

  1. properties_file 
  2. build_image.py [輸入目錄] [屬性文件] [輸出文件] [輸出錄了] 
  3.   in_dir = argv[0] 
  4.   glob_dict_file = argv[1] 
  5.   out_file = argv[2] 
  6.   target_out = argv[3] 

 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-09-16 15:04:28

鴻蒙HarmonyOS應用

2021-07-02 14:16:04

鴻蒙HarmonyOS應用

2021-12-02 10:05:01

鴻蒙HarmonyOS應用

2021-06-11 14:16:21

Windows 10WSL OpenHarmon

2024-07-26 16:39:33

鴻蒙系統開源構建系統

2023-06-12 15:43:44

鴻蒙智能家居開發

2021-10-13 07:18:40

鴻蒙HarmonyOS應用

2022-02-21 14:49:26

OpenHarmon操作系統鴻蒙

2023-08-04 15:00:43

ArkTS語言鴻蒙

2023-07-17 16:13:21

組件模塊開發的鴻蒙

2021-07-21 09:58:50

鴻蒙HarmonyOS應用

2021-07-19 15:34:05

鴻蒙HarmonyOS應用

2021-09-08 15:23:51

鴻蒙HarmonyOS應用

2023-08-11 14:06:58

鴻蒙Windows

2022-01-11 15:41:18

鴻蒙HarmonyOS應用

2023-07-27 14:38:33

開源鴻蒙

2021-07-27 11:54:51

windows系統OpenHarmony

2021-08-13 10:09:36

鴻蒙HarmonyOS應用

2021-08-06 15:09:22

鴻蒙HarmonyOS應用

2021-07-08 16:23:48

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

五月天中文字幕| 三级黄色片免费观看| 青青草视频在线观看| 狂野欧美一区| 少妇高潮久久久久久潘金莲| 拔插拔插华人永久免费| 女子免费在线观看视频www| www.亚洲人| 国产精品99久久久久久久久 | 中文字幕免费精品一区| 黄色aaaaaa| 在线视频超级| 亚洲天堂网中文字| 久久综合狠狠综合久久综青草 | 日韩国产精品91| 久久成人精品一区二区三区| 亚洲中文字幕无码av| 男人天堂久久| 欧美香蕉大胸在线视频观看| 亚洲在线色站| 欧洲一区av| 国产aⅴ综合色| 国产精品午夜国产小视频| 国产一区二区精彩视频| 色婷婷精品视频| 日韩欧美在线综合网| 欧美午夜aaaaaa免费视频| 搞黄网站在线看| 亚洲欧美影音先锋| 欧洲高清一区二区| 亚洲国产精品国自产拍久久| 日韩精品91亚洲二区在线观看| 中文字幕精品一区二区精品| 成年人小视频在线观看| 色噜噜成人av在线| 午夜精品福利在线| 免费观看中文字幕| 大胆av不用播放器在线播放 | 中文字幕午夜精品一区二区三区| 亚洲国产精品va在线看黑人动漫| 久久久久xxxx| 日日夜夜天天综合| 亚洲h在线观看| 日韩第一页在线观看| 可以在线观看的av| 波多野结衣亚洲一区| 91久久国产精品91久久性色| 国产又大又粗又爽| 亚洲午夜久久久久久尤物| 中文字幕亚洲第一| 国产熟妇搡bbbb搡bbbb| 日韩精品一区国产| 欧美日韩国产片| 欧美成人xxxxx| 91九色国产在线播放| 综合分类小说区另类春色亚洲小说欧美 | 久久久久在线| 97视频在线观看免费| 一区二区三区影视| 亚洲mv大片欧洲mv大片| 这里只有视频精品| 法国空姐电影在线观看| 丝袜连裤袜欧美激情日韩| 日韩精品中文字幕在线一区| 女同激情久久av久久| 超碰这里只有精品| 91久久奴性调教| 日韩欧美精品在线观看视频| 老司机深夜福利在线观看| 亚洲最大成人综合| 日本精品福利视频| caoporn免费在线| 亚洲欧美日韩久久精品| 国产又黄又爽免费视频| 日韩理伦片在线| 亚洲天堂2016| 国产精品久久成人免费观看| 国产日产一区二区| 亚洲人精品午夜| 玖玖精品在线视频| 五月婷婷视频在线观看| 一区二区三区丝袜| 日本香蕉视频在线观看| 黄页网站在线观看免费| 亚洲一区二区三区四区在线 | 亚洲图片88| 成人欧美一区二区三区白人| 亚洲日本一区二区三区在线不卡 | 国产福利电影在线播放| 午夜精品久久一牛影视| 各处沟厕大尺度偷拍女厕嘘嘘| 女厕盗摄一区二区三区| 一本色道久久综合狠狠躁的推荐| 成人久久久久久久久| 姬川优奈av一区二区在线电影| 色94色欧美sute亚洲13| 日本国产一级片| 国产亚洲亚洲国产一二区| 日韩免费视频一区二区| 亚洲精品乱码久久久久久蜜桃图片| 国产精品色呦| 一本色道久久88综合亚洲精品ⅰ| 18啪啪污污免费网站| 欧美va天堂在线| 97国产在线视频| av首页在线观看| 国产一区二区三区黄视频 | 99精品女人在线观看免费视频| 欧美日韩精品欧美日韩精品 | 亚洲天堂电影| 在线播放欧美女士性生活| 老女人性生活视频| 欧美激情网址| 日韩在线播放视频| 日干夜干天天干| 麻豆精品国产传媒mv男同| 成人免费看片网址| 国产一二三区在线视频| 亚洲视频一区二区在线| 欧美日韩国产精品激情在线播放| 亚洲高清国产拍精品26u| 亚洲爱爱爱爱爱| 变态另类ts人妖一区二区| 中文字幕免费精品| 日本精品久久久| av中文字幕播放| 国产亚洲欧美中文| 婷婷无套内射影院| 日韩欧美三区| 亚洲女人天堂av| 精品国产乱码久久久久久鸭王1| 国产欧美丝祙| 999热视频在线观看| 好男人免费精品视频| 一区二区三区不卡视频在线观看 | 国产精品99久久久久久人| 国产喷水福利在线视频| 91蜜桃网址入口| 日韩中文字幕av在线| 精品三级久久| 日韩一级完整毛片| 懂色av蜜臀av粉嫩av永久| 在线亚洲成人| 成人黄色片视频网站| 在线看黄色av| 在线精品亚洲一区二区不卡| 天天躁日日躁狠狠躁av| 一区二区在线影院| 91精品久久久久久久久| 国产资源在线播放| 欧美日韩美女视频| 蜜臀视频在线观看| 牛牛国产精品| 91在线免费看网站| 成人在线免费视频| 91久久精品国产91性色tv | 免费一级片在线观看| 免费看黄色91| 日韩欧美一区二区视频在线播放| 少妇在线看www| 亚洲国产精品悠悠久久琪琪| 黑鬼狂亚洲人videos| 久久超级碰视频| 亚洲一区不卡在线| 91综合国产| 伊人青青综合网站| 波多野结衣mp4| 久久精品日韩一区二区三区| 内射国产内射夫妻免费频道| 久久夜色电影| 2023亚洲男人天堂| 少妇高潮一区二区三区69| 欧美日韩国产精品一区二区三区四区| 亚洲av人人澡人人爽人人夜夜| 国产真实久久| 国产精品一区二区三区四区五区| 国内在线视频| 亚洲精品wwww| 精品国产午夜福利| 国产亚洲综合av| 成人亚洲精品777777大片| 欧美xxxx中国| 亚洲一区中文字幕在线观看| 肉肉视频在线观看| 欧美精品一区二区三区蜜臀| 国产一级淫片a| 久久日韩精品一区二区五区| 欧美私人情侣网站| 日韩精品四区| 91沈先生在线观看| 成人性生交大片免费看网站| 亚洲国产黄色片| 极品国产91在线网站| 国产精品情趣视频| 中文字幕avav| 亚洲久久成人| 色噜噜狠狠色综合网| 亚洲1234区| 在线成人激情黄色| 国产孕妇孕交大片孕| 精品日本高清在线播放| 中文字幕第4页| 精品一区二区三区蜜桃| 欧美国产视频一区| 妖精视频一区二区三区| 国产精品网址在线| 懂色av一区| 日韩精品视频在线播放| 欧美日韩综合在线观看| 国产欧美日韩激情| 九色91porny| 性xx色xx综合久久久xx| 中文字幕日韩一区二区三区不卡| 2020国产精品极品色在线观看| 欧美中文在线观看国产| 人人干在线视频| 亚洲精品xxx| 91欧美日韩麻豆精品| 亚洲va欧美va人人爽午夜| 国产视频123区| 成人avav在线| 91亚洲精品久久久蜜桃借种| 国产色综合网| 裸体裸乳免费看| 国产精品免费不| 岛国一区二区三区高清视频| 美女网站视频一区| 777777777亚洲妇女| 久草资源在线| 亚洲午夜性刺激影院| 成人无码一区二区三区| 欧美日韩激情在线| 中文字幕视频网| 亚洲尤物视频在线| 神马久久精品综合| 国产精品污污网站在线观看| 变态另类丨国产精品| 国产精品中文字幕日韩精品| 欧美在线观看视频网站| 亚洲三级电影在线观看| 免费久久久久久| 成人同人动漫免费观看 | 粉嫩久久久久久久极品| 国产有码一区二区| 成人黄色免费短视频| 久久久久久亚洲| a级片国产精品自在拍在线播放| 在线成人免费网站| 国产在线黄色| 日韩精品极品在线观看| 亚洲欧美另类日韩| 欧美日韩极品在线观看一区| 国产精品男女视频| 精品久久久久久久久久久久 | 欧美日韩国产精品一区二区三区四区| 亚洲成人生活片| 亚洲欧洲日韩女同| 天堂网av2018| 中文字幕不卡在线观看| 69精品无码成人久久久久久| 久久久久久久久久久99999| 中文字幕在线视频播放| 成人免费黄色大片| 九九热视频免费| 国产一区久久久| 欧美xxxxxbbbbb| 肉丝袜脚交视频一区二区| 欧美成人高潮一二区在线看| 欧美~级网站不卡| 欧美一二三不卡| 韩国亚洲精品| 亚洲国产精品成人天堂| 精品动漫av| 水蜜桃色314在线观看| 最新亚洲视频| 久在线观看视频| 翔田千里一区二区| www.xxx亚洲| 奇米影视在线99精品| 99精品视频播放| 美女性感视频久久| 99re6在线观看| 国产精品88888| 国产亚洲色婷婷久久| 成人不卡免费av| 人妻 丝袜美腿 中文字幕| 国产精品1区2区3区在线观看| 国产原创剧情av| 国产午夜三级一区二区三| 亚洲一级黄色录像| 亚洲欧洲制服丝袜| 国产精品第一页在线观看| 黑人巨大精品欧美一区免费视频 | 亚洲一级网站| 色综合av综合无码综合网站| 日本最新不卡在线| 亚洲一区二区福利视频| 大陆成人av片| 国产麻豆剧传媒精品国产av| 久久精品夜色噜噜亚洲aⅴ| 久久精品色妇熟妇丰满人妻| 亚洲最大的成人av| 欧美一级淫片免费视频黄| 欧美日韩夫妻久久| 亚洲精品第五页| 国产婷婷色综合av蜜臀av| 极品白浆推特女神在线观看| 色偷偷偷亚洲综合网另类| 不卡一本毛片| 国产精品视频久| 国产主播性色av福利精品一区| 欧美三日本三级少妇三99| 911精品美国片911久久久| 霍思燕三级露全乳照| 奇米精品一区二区三区四区| 乱码一区二区三区| 国产欧美视频一区二区三区| 久久国产精品二区| 色激情天天射综合网| 超碰福利在线观看| 日韩一区二区在线视频| 黄色综合网址| 国产高清自拍一区| 精品国产91| 国产情侣第一页| 美女www一区二区| yjizz视频| 国产精品久久三| 国产精品乱子伦| 亚洲成av人乱码色午夜| 淫片在线观看| 国产精品成人播放| 欧美日韩导航| 激情五月六月婷婷| 麻豆精品久久精品色综合| 中文字幕第4页| 亚洲成国产人片在线观看| 91国内精品久久久| 亚洲日本欧美中文幕| 精品国产99久久久久久| 国产精品com| 老司机成人在线| 精品国产一区二区三区在线| 热久久久久久久| 中文字幕免费视频| 欧美日韩性视频| 欧美一区二区在线观看视频| 欧美成人h版在线观看| 久久99国产精品二区高清软件| 久久影院理伦片| 亚洲黄色视屏| 欧洲一级黄色片| 偷拍与自拍一区| 日本人妻熟妇久久久久久| 久久国产精品偷| 2020国产精品小视频| 亚洲二区三区四区| 免费久久精品视频| 潮喷失禁大喷水aⅴ无码| 在线精品视频免费播放| 可以直接在线观看的av| 热re91久久精品国99热蜜臀| 欧美激情影院| 久久99中文字幕| 99国产精品一区| 在线观看中文字幕视频| 日韩风俗一区 二区| 日本不卡1234视频| 欧美不卡三区| 久久精品五月| 成人无码av片在线观看| 欧美日韩在线视频首页| 人妻无码中文字幕免费视频蜜桃| 久久久久久久成人| 精品久久ai| 国产1区2区在线| 国产午夜精品一区二区| 久久国产乱子伦精品| 国产香蕉一区二区三区在线视频 | 国产一级淫片免费| 日韩成人黄色av| 日本高清不卡一区二区三区视频| 欧美激情视频一区二区三区| 久久精品天堂| 北条麻妃在线观看视频| 欧美一区二区国产| 丁香影院在线| 奇米精品在线| 日韩激情一区二区| 精品人妻伦九区久久aaa片| 日韩亚洲国产中文字幕欧美| 成人国产电影在线观看| 日韩av高清| 国产综合色在线视频区| 国产在线视频在线观看| 日韩电影在线观看中文字幕 | 亚洲国产免费av| 成人黄色免费短视频| 国产乱淫av片杨贵妃| 国产色一区二区|