自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙編譯構(gòu)建丨h(huán)b工具分析

開發(fā) 開發(fā)工具
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com

[[406365]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

這篇文章是針對 OpenHarmony_release_v1.1.0 LTS 這個版本分析。

1.hb工具是啥

hb是HarmonyOS2.0里新增加的編譯構(gòu)建命令行工具。需要Python 3.7.4及以上版本的支持,建議安裝3.8.x。源碼在OpenHarmony\build\lite\hb這個目錄下。

安裝方法,可以直接使用pip安裝打包好的工具。但是我們?yōu)榱朔奖阏{(diào)試,我們直接使用源碼進(jìn)行單步調(diào)試。

  1. python3 -m pip install --user ohos-build 

2.開啟單步調(diào)試

鴻蒙編譯構(gòu)建丨h(huán)b工具分析-鴻蒙HarmonyOS技術(shù)社區(qū)

我的環(huán)境是Ubuntu20.04,安裝VScode,新建VScode調(diào)試腳本,腳本內(nèi)容如下:

  1.     // 使用 IntelliSense 了解相關(guān)屬性。  
  2.     // 懸停以查看現(xiàn)有屬性的描述。 
  3.     // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 
  4.     "version""0.2.0"
  5.     "configurations": [ 
  6.         { 
  7.             "name""hb build debug"
  8.             "type""python"
  9.             "request""launch"
  10.             "program""./build/lite/hb/__main__.py"
  11.             "console""integratedTerminal"
  12.             "args": ["build"], 
  13.             "stopOnEntry"true 
  14.         } 
  15.     ] 

調(diào)試前,使用hb set設(shè)置好參數(shù)。查看我這次調(diào)試用的hb環(huán)境參數(shù),hb env調(diào)取的是ohos_config.json。

  1. hb env 
  2. [OHOS INFO] root path: /home/bright/harmony110 
  3. [OHOS INFO] board: hispark_pegasus 
  4. [OHOS INFO] kernel: liteos_m 
  5. [OHOS INFO] product: wifiiot_hispark_pegasus 
  6. [OHOS INFO] product path: /home/bright/harmony110/vendor/hisilicon/hispark_pegasus 
  7. [OHOS INFO] device path: /home/bright/harmony110/device/hisilicon/hispark_pegasus/sdk_liteos 

hb啟動入口:build\lite\hb_main_.py

3.分析hb編譯構(gòu)建

接下來按F5啟動調(diào)試,就可以就行調(diào)試了。

鴻蒙編譯構(gòu)建丨h(huán)b工具分析-鴻蒙HarmonyOS技術(shù)社區(qū)

下面是我分析得到的結(jié)果,如有不對的地方歡迎指正。

第一步:各種初始化

  1. Z:\OpenHarmony\build\lite\hb\__main__.py 
  2.  
  3. # 獲取參數(shù),執(zhí)行到這里,各種import...才算完成 
  4. args = parser.parse_args() 
  5.  
  6. # 執(zhí)行命令參數(shù),建議斷點打在這里 
  7. status = args.command(args) 

第二步:讀取json數(shù)據(jù)文件

utils.py:46 read_json_file(),首先讀取的是ohos_config.json

接著是config.json,通過下面的循環(huán),獲取json文件的參數(shù)。build\lite\hb\common\product.py

  1. @staticmethod 
  2.   def get_features(product_json): 
  3.       if not os.path.isfile(product_json): 
  4.           raise Exception('{} not found'.format(product_json)) 
  5.  
  6.       features_list = [] 
  7.       subsystems = read_json_file(product_json).get('subsystems', []) 
  8.       for subsystem in subsystems: 
  9.           for component in subsystem.get('components', []): 
  10.               features = component.get('features', []) 
  11.               features_list += [feature for feature in features 
  12.                                 if len(feature)] 
  13.  
  14.       return features_list 

第三步:要生成輸出文件夾,并執(zhí)行g(shù)n、ninja命令

build/lite/hb/build/build_process.py:

  1. 120行:生成輸出文件夾 
  2. makedirs(self.config.out_path) 
  3.  
  4. 107行:要執(zhí)行的命令放在cmd_list列表里。 
  5. for exec_cmd in cmd_list: 
  6.     exec_cmd(cmd_args) 
  7.  
  8. 這里調(diào)試的hb build 執(zhí)行了2次命令,分析如下: 
  9. 131行:第一次 
  10. def gn_build(self, cmd_args): 
  11.     # 清空輸出目錄,把wifiiot_hispark_pegasus整個刪除,再重新建立 
  12.     remove_path(self.config.out_path) 
  13.     makedirs(self.config.out_path) 
  14.     # Gn命令初始化和執(zhí)行。 
  15.     gn_cmd的值:就是生成的 build.ninja的頭部 + args.gn的內(nèi)容 
  16.     ['/home/bright/developtools/gn/gn'
  17.      'gen'
  18.       '/home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus'
  19.        '--root=/home/bright/harmony110'
  20.         '--dotfile=/home/bright/harmony110/build/lite/.gn'
  21.          '--script-executable=python3'
  22.           '--args=ohos_build_type="debug" 
  23.            ohos_build_compiler_specified="clang" 
  24.             ohos_build_compiler_dir="/home/bright/developtools/llvm" 
  25.              product_path="/home/bright/harmony110/vendor/hisilicon/hispark_pegasus" 
  26.               device_path="/home/bright/harmony110/device/hisilicon/hispark_pegasus/sdk_liteos" 
  27.                ohos_kernel_type="liteos_m" ohos_full_compile=true'] 
  28.      # 注意?。航酉聛韴?zhí)行命令寫入日志,生成*.ninja等文件。 
  29.      exec_command(gn_cmd, log_path=self.config.log_path) 
  30.      # gn生產(chǎn)ninja文件,此時輸出目錄會生產(chǎn)下列文件 
  31.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\obj" 
  32.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\args.gn" 
  33.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\build.ninja" 
  34.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\build.ninja.d" 
  35.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\toolchain.ninja" 
  36. 171行:第二次 
  37. def ninja_build(self, cmd_args): 
  38.     ninja_cmd的值:ninja -w dupbuild=warn -C /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus 
  39.     # 執(zhí)行完這句的時候,最終的鏡像文件就已經(jīng)生成了。 
  40.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\gen" 
  41.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\libs" 
  42.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\obj" 
  43.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\.ninja_log" 
  44.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\build.log" 
  45.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_boot_signed.bin" 
  46.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_boot_signed_B.bin" 
  47.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_loader_signed.bin" 
  48.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app.asm" 
  49.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app.map" 
  50.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app.out" 
  51.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_allinone.bin" 
  52.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_burn.bin" 
  53.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_flash_boot_ota.bin" 
  54.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_ota.bin" 
  55.     "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_vercfg.bin" 

總結(jié)整個流程就是,

  1. 初始化工具。
  2. 提取配置文件ohos_config.json、config.json。
  3. 生成輸出文件夾。
  4. 通過配置文件參數(shù)執(zhí)行兩條gn、ninja命令。然后打印信息,寫入log文件。

接下來添加打印信息,驗證我們的結(jié)論。注意!:不要使用打包好的hb命令,使用源碼構(gòu)建命令才能顯示我們添加的信息。

  1. build\lite\hb\common\utils.py:77行 
  2. print(cmd)  # 控制臺,輸出cmd 
  3. # 然后在鴻蒙主目錄執(zhí)行 
  4. build/lite/hb/__main__.py build 
  5. # 將會看到我們添加的命令輸出了執(zhí)行的命令內(nèi)容。 

 最后,我們測試下,不使用鴻蒙hb構(gòu)建系統(tǒng),手動執(zhí)行g(shù)n、ninja命令,來生成鴻蒙

  1. gn gen /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus --root=/home/bright/harmony110 --dotfile=/home/bright/harmony110/build/lite/.gn --script-executable=python3  '--args=ohos_build_type="debug" ohos_build_compiler_specified="clang" ohos_build_compiler_dir="/home/bright/developtools/llvm" product_path="/home/bright/harmony110/vendor/hisilicon/hispark_pegasus" device_path="/home/bright/harmony110/device/hisilicon/hispark_pegasus/sdk_liteos" ohos_kernel_type="liteos_m" ohos_full_compile=true' 
  2.  
  3. ninja -w dupbuild=warn -C /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus 
  4.  
  5. //加上-v可以顯示編譯命令 
  6. ninja -v -w dupbuild=warn -C /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus 

 好了,以上就是針對 OpenHarmony_release_v1.1.0 LTS 編譯構(gòu)建hb工具的分析。2.0的構(gòu)建加入了build.sh,會有不同,之后更新新版分析。

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2024-01-11 16:02:38

OHOS依賴關(guān)系檢查編譯構(gòu)建系統(tǒng)

2022-11-01 15:29:03

移植案例hb命令

2022-10-31 15:40:22

移植案例鴻蒙

2010-02-03 15:09:13

Python 構(gòu)建工具

2024-07-26 16:39:33

鴻蒙系統(tǒng)開源構(gòu)建系統(tǒng)

2021-05-18 10:18:15

Java

2022-06-10 14:37:24

鴻蒙操作系統(tǒng)

2023-02-09 15:28:19

鴻蒙編譯速度

2021-12-02 10:05:01

鴻蒙HarmonyOS應(yīng)用

2015-01-15 11:01:43

2023-06-12 15:43:44

鴻蒙智能家居開發(fā)

2023-08-16 14:39:20

微服務(wù)Java

2021-06-28 09:38:50

鴻蒙HarmonyOS應(yīng)用

2009-12-25 15:21:00

WPF構(gòu)建前臺

2021-11-19 17:22:43

TensorFlow模型機器學(xué)習(xí)

2019-08-06 08:20:07

編譯器工具開發(fā)者

2020-08-06 10:25:30

數(shù)據(jù)庫MySQLjoin

2021-10-20 10:04:47

鴻蒙HarmonyOS應(yīng)用

2020-07-10 16:00:57

dumpJava內(nèi)存
點贊
收藏

51CTO技術(shù)棧公眾號