日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
鴻蒙編譯構(gòu)建丨h(huán)b工具分析

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

創(chuàng)新互聯(lián)建站主營(yíng)零陵網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開(kāi)發(fā),零陵h5小程序開(kāi)發(fā)搭建,零陵網(wǎng)站營(yíng)銷(xiāo)推廣歡迎零陵等地區(qū)企業(yè)咨詢

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

https://harmonyos.

這篇文章是針對(duì) OpenHarmony_release_v1.1.0 LTS 這個(gè)版本分析。

1.hb工具是啥

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

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

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

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

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

 
 
 
 
  1.     // 使用 IntelliSense 了解相關(guān)屬性。  
  2.     // 懸停以查看現(xiàn)有屬性的描述。 
  3.     // 欲了解更多信息,請(qǐng)?jiān)L問(wèn): 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啟動(dòng)入口:build\lite\hb_main_.py

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

接下來(lái)按F5啟動(dòng)調(diào)試,就可以就行調(diào)試了。

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

第一步:各種初始化

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

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

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

接著是config.json,通過(guò)下面的循環(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整個(gè)刪除,再重新建立 
  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.      # 注意!:接下來(lái)執(zhí)行命令寫(xiě)入日志,生成*.ninja等文件。 
  29.      exec_command(gn_cmd, log_path=self.config.log_path) 
  30.      # gn生產(chǎn)ninja文件,此時(shí)輸出目錄會(huì)生產(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í)行完這句的時(shí)候,最終的鏡像文件就已經(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é)整個(gè)流程就是,

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

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

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

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

 
 
 
 
  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 

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

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

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

https://harmonyos.


網(wǎng)站欄目:鴻蒙編譯構(gòu)建丨h(huán)b工具分析
URL分享:http://www.dlmjj.cn/article/dpchjhp.html