色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙OpenHarmony:【關于deps、external_deps的使用】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-13 17:10 ? 次閱讀

關于deps、external_deps的使用

在添加一個模塊的時候,需要在BUILD.gn中聲明它的依賴,為了便于后續處理部件間依賴關系,我們將依賴分為兩種——部件內依賴deps和部件間依賴external_deps。

依賴分類

依賴關系分類

開發前請熟悉鴻蒙開發指導文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

如上圖所示,主要分為部件內依賴(圖左)和部件間依賴(圖右)。

  • 部件內依賴: 現有模塊module1屬于部件part1,要添加一個屬于部件part1的模塊module2,module2依賴于module1,這種情況就屬于部件內依賴。

  • 部件間依賴: 現有模塊module1屬于部件part1,要添加一個模塊module2,module2依賴于module1,module2屬于部件part2。模塊module2與模塊module1分屬于兩個不同的部件,這種情況就屬于部件間依賴。

  • 部件內依賴示例:

    import("http://build/ohos.gni")
    ohos_shared_library("module1") {
      ……
      part_name = "part1"   # 必選,所屬部件名稱
      ……
    }
    
    import("http://build/ohos.gni")
    ohos_shared_library("module2") {
      ……
      deps = [
        "module1的gn target",
      ……
     ]                        # 部件內模塊依賴
    part_name = "part1"       # 必選,所屬部件名稱
    }
    
  • 部件間依賴示例:

    import("http://build/ohos.gni")
    ohos_shared_library("module1") {
      ……
      part_name = "part1"   # 必選,所屬部件名稱
      ……
    }
    
    import("http://build/ohos.gni")
    ohos_shared_library("module2") {
      ……
      external_deps = [
        "part1:module1",
      ……
      ]                      # 部件間模塊依賴,這里依賴的模塊必須是依賴的部件聲明在inner_kits中的模塊
      part_name = "part2"    # 必選,所屬部件名稱
    }
    

    icon-note.gif注意 :部件間依賴要寫在external_deps里面,格式為”部件名:模塊名"的形式,并且依賴的模塊必須是依賴的部件聲明在inner_kits中的模塊。

Sanitizer使用說明

在添加模塊時,可選地對該模塊開啟編譯器提供的Sanitizer功能,包括整數溢出排錯、控制流完整性檢查等。配置的每一項都是可選的,如不指定默認為false或者空。Sanitizer配置示例如下所示:

ohos_shared_library("example") {
    sanitize = {
      cfi = true                             # 開啟控制流完整性檢測
      cfi_cross_dso = true                   # 開啟跨so調用的控制流完整性檢測
      integer_overflow = true                # 開啟整數溢出檢測
      boundary_sanitize = true               # 開啟邊界檢測
      ubsan = true                           # 開啟部分ubsan選項
      all_ubsan = true                       # 開啟全量ubsan選項
      debug = true                           # 可選,調測模式,默認是不開啟
      blocklist = "./blocklist.txt"          # 可選,屏蔽名單路徑
    }
    ...
  }

支持的Sanitizer類型

目前支持開啟的Sanitizer:

  • 整數溢出排錯:unsigned_integer_overflow/signed_integer_overflow/integer_overflow(同時包括無符號和有符號整數溢出兩種檢查)
  • 控制流完整性:cfi、cfi_cross_dso(跨so的cfi檢查)
  • 邊界檢測:boundary_sanitize
  • 部分未定義行為檢測:ubsan(bool,integer-divide-by-zero,return,returns-nonnull-attribute,shift-exponent,unreachable,vla-bound等編譯選項)
  • 全量未定義行為檢測:all_ubsan(全量undefined behavior sanitizer編譯選項)

發布、調測模式

通過debug選項控制使用發布模式還是調測模式,默認為發布模式,使用debug = true顯式聲明開啟調測模式。debug選項僅對Sanitizer生效,且與模塊是否編譯為調試版本無關,但在模塊發布版本的編譯配置中不應帶此選項,或顯式地將debug設置為false,使得Sanitizer處于發布模式。

  • 調測模式:用于開發時排查問題。該模式下會輸出產生錯誤相關的豐富信息來輔助定位錯誤,并且在發生錯誤后并不會直接中斷程序運行,而是會恢復程序運行進一步識別后續的錯誤。
  • 發布模式:保護程序不發生錯誤或被惡意攻擊,在產生錯誤后直接中斷程序不會繼續執行。

屏蔽名單

指定該模塊中不受Sanitizer選項影響的函數或源程序文件名單,用于避免良性行為被識別為錯誤、熱點函數產生了不合理、不可接受的開銷;該名單需謹慎使用。名單示例如下所示:

[cfi]
fun:*([Tt]est|TEST)*
fun: main

[integer]
src:example/*.cpp

開源軟件Notice收集策略說明

開源軟件Notice是與項目開源相關的文件,收集這些文件的目的是為了符合開源的規范。

收集目標

只收集打包到鏡像里面的模塊對應的License;不打包的都不收集,比如構建過程使用的工具(如clang、python、ninja等)都是不收集的。

靜態庫本身是不會被打包的,一般是作為動態庫或者可執行程序的一部分被打包到系統中的,為了確保完備,靜態庫的都會收集。

最終合并的NOTICE.txt要體現出鏡像中每個文件都是用了哪些License,模塊和License要有對應關系。

最終合并的NOTICE.txt文件在/system/etc/ 目錄下。

收集規則

按照優先級收集License,以下由1到4,優先級依次降低。

  1. 模塊在BUILD.gn中直接聲明自己使用的License文件,優先級最高。如下示例:
    ohos_shared_library("example") {
        ...
        license_file = "path-to-license-file"
        ...
    }
    
  2. 如果模塊沒有顯式聲明,那么編譯腳本會在BUILD.gn所在的當前目錄中查找Readme.OpenSource文件,解析該文件,找出該文件中聲明的license,將其作為模塊的License。 如果Readme.OpenSource文件中配置的license文件不存在,直接報錯。
  3. 如果Readme.OpenSource文件不存在,編譯腳本會從當前目錄開始,向上層目錄尋找(一直找到源碼的根目錄),默認查找License、Copyright、Notice三個文件,如果找到,則將其作為模塊的License。
  4. 如果上面三種方式都未找到license,則使用默認的license作為該模塊的license;默認license是Apache2.0 License。

需要注意及檢查的問題

  • 三方的開源軟件,比如openssl,icu等,這部分軟件基本上在源碼目錄下都要求配置Readme.OpenSource,要檢查Readme.OpenSource文件是否和BUILD.gn文件在同一個目錄,以及Readme.OpenSource文件中配置的License文件是否存在以及真實有效。
  • 代碼目錄下,如果代碼使用的不是Apache2.0 License,需要在目錄下提供對應的License文件,或者直接在模塊中指定license_file。
  • 如果BUILD.gn中添加的源碼文件不是當前目錄的,需要檢查下源碼文件所在倉下的license是否和BUILD.gn文件所在倉的一致。

加快本地編譯的一些參數

編譯時,適當選擇添加以下的編譯參數可以加快編譯的過程。

  • 添加--ccache參數 :
    • 原理:ccache會緩存c/c++編譯的編譯輸出,下一次在編譯輸入不變的情況下,直接復用緩存的產物。
    • 安裝:
      • 快速安裝:執行sudo apt-get install ccache命令。
      • [官網下載],下載二進制文件,把ccache所在路徑配置到環境變量。
    • 使用:執行./build.sh --product-name 產品名 --ccache命令。
  • 添加--fast-rebuild參數
    • 原理:編譯流程主要分為:preloader->loader->gn->ninja這四個過程,在本地沒有修改gn和產品配置相關文件的前提下,添加--fast-rebuild會讓你直接從ninja編譯開始。
    • 使用:執行./build.sh --product-name 產品名 --fast-rebuild命令。
  • 添加enable_notice_collection=false參數
    • 原理:省略掉收集開源軟件模塊的license的過程。
    • 使用:執行./build.sh --product-name 產品名 --gn-args --enable_notice_collection=false --ccache命令。
  • 添加--build-target參數
    • 該參數用于指定編譯模塊,如何找模塊的名字:
      • 相關倉下BUILD.gn中關注group、ohos_shared_library、ohos_executable等關鍵字。
      • ./build.sh --product-name 產品名 --build-target 模塊名 --build-only-gn生成build.ninja,然后去該文件中查找相關模塊名。
    • 使用:執行./build.sh --product-name 產品名 --build-target ark_js_host_linux_tools_packages命令。

查看NinjaTrace

out/rk3568/.ninja_log文件記錄了每個模塊編譯的開始和結束時間(ms),結束時間和開始時間間隔越短表示模塊的編譯時間越短,編譯性能越高。

從左到右分別表示:start time|end time|mtime|command hash。

Ninja_Trace

圖形化顯示編譯時間。

  • 本地打開ninja trace: 解壓out/rk3568/build.trace.gz,將build.trace拖到chrome的trace鏈接chrome://tracing/打開即可。
  • 在CI網站ci.openharmony.cn/events上打開ninja trace: CI上每個編譯的輸出里面有build.trace.html可直接打開,具體方法是:
    1. 點擊靜態檢查下的“成功”;
    2. 點擊輸出列的“輸出”即可在左側的build_trace列看到build.trace.html文件,單擊該文件即可打開。

定制打包chip_prod鏡像使用說明

背景

針對同一個芯片解決方案下的子產品的定制能力,將差異能力放到 chip_prod 分區,因此需要支持對不同子產品生成對應的 chip_prod.img。

使用步驟

  1. 產品解決方案配置:
    產品解決方案配置文件config.json中添加"chipprod_config_path"配置選項,即"chipprod_config_path":"子產品定義文件所在的路徑"。 其中子產品定義文件的文件名為chip_product_list.gni,文件格式為:chip_product_list = ["productA", "productB", ...]
    示例:
    以MyProduct產品定制chipprod鏡像為例,//vendor/產品廠商/MyProduct/config.json配置如下:
    {
         "product_name": "MyProduct",                                 # 產品名稱
         "version": "3.0",                                            # config.json的版本號, 固定"3.0"
         "chipprod_config_path": "",                                  # 存放chipprod配置文件路徑,可選項
     "subsystems": [
           {
             "subsystem": "arkui",                                    # 選擇的子系統
             "components": [
               {
                   "component": "ace_engine",
                   "features":[ "ace_engine_feature_enable_web = true",
                     "ace_engine_feature_enable_accessibility = true" ] }   
             ]
           },
           {
            ......
           }
          ......
          更多子系統和部件
         }
    }
    
  2. 模塊編譯配置:
    某個配置文件在不同的子產品中有差異,比如要打包到productA對應的chip_prod.img中,則模塊編譯需要配置install_imagesmodule_install_dir
    ohos_prebuilt_executable示例:
    ohos_prebuilt_executable("moduleXXX"){
     install_images = [ "chip_prod" ]
     module_install_dir = "productA/etc/***"     # module_install_dir指定的路徑需要以productA開始。
    }
    

3.編譯命令

./build.sh --product-name {product_name} --build-target chip_prod_image
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

搜狗高速瀏覽器截圖20240326151450.png
4. 打包結果:
如果定義了子產品productA和productB,即chip_product_list = ["productA", "productB"],并且有模塊安裝到了該產品下,則打包后鏡像輸出路徑如下:


images/productA/chip_prod.img
images/productB/chip_prod.img


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2362

    瀏覽量

    42883
  • OpenHarmony
    +關注

    關注

    25

    文章

    3725

    瀏覽量

    16368
收藏 人收藏

    評論

    相關推薦

    鴻蒙開發:OH編譯構建分析 - 依賴關系檢查

    :模塊名稱\" 這里依賴的模塊必須是依賴的部件聲明在inner_kits中的模塊 external_deps = [ \"part_name:module_name\"
    發表于 01-16 20:35

    基于OpenHarmony標準系統的C++公共基礎類庫案例:SafeQueue

    接口 安全數據容器、數據序列化等接口 各子系統的錯誤碼相關定義 2.1、添加C++公共基礎類庫依賴 修改需調用模塊的BUILD.gn,在external_depsdeps中添加如下
    發表于 08-21 10:56

    基于OPenHarmony的智慧牧場#鴻蒙

    鴻蒙HarmonyOSOpenHarmony
    發布于 :2022年09月23日 16:21:11

    鴻蒙源碼編譯出錯

    按照鴻蒙官方入門教程(https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start
    發表于 03-29 21:23

    如何在鴻蒙標準系統的代碼倉里正確添加自己的代碼文章

    、system_kits、test_list四個部分的聲明:- module_list:組件包含的模塊列表,必選- inner_kits:組件提供其它組件的接口(和跨組件模塊依賴external_deps相對
    發表于 04-24 10:43

    【潤和軟件DAYU200開發板體驗】移植speexdsp到OpenHarmony標準系統③

    warnings (use '-w list' to list warnings)關于depsexternal_deps的使用在添加一個模塊的時候,需要在BUILD.gn中聲明它的依賴,為了便于后續處理部件
    發表于 10-06 22:51

    OpenHarmony C++公共基礎類庫應用案例:Thread

    external_depsdeps中添加如下: ohos_shared_library(\"xxxxx\") { ... external_deps = [ ... # 動態庫依賴(可選
    發表于 11-22 11:50

    openharmony鴻蒙區別

    OpenHarmony是HarmonyOS的開源版。 華為的鴻蒙操作系統是純自己研發的,但是openharmony卻不是華為的,openharmony是由開放原子開源基金會(OpenA
    的頭像 發表于 06-24 16:21 ?4162次閱讀

    openharmony鴻蒙有什么關系

    平板、手機、智能家居都可以通過建房子搭積木的方式來使用鴻蒙系統。 openharmony鴻蒙之間屬于相輔相成的,可以說openharmony就是建設
    的頭像 發表于 06-22 16:02 ?1.2w次閱讀

    openharmony 鴻蒙

    openharmony 鴻蒙 openharmony 鴻蒙,HarmonyOS是一款“面向未來”、面向全場景(移動辦公、運動健康、社交通信、媒體娛樂等)的分布式操作系統。在傳統的單設備
    的頭像 發表于 06-21 19:37 ?1868次閱讀

    openharmony官網和鴻蒙

    openharmony官網和鴻蒙 OpenHarmony(開源鴻蒙系統)是HarmonyOS的開源版,由華為捐贈給開放原子開源基金會(OpenAtom Foundation)開源,第一
    的頭像 發表于 06-21 19:50 ?2646次閱讀

    openharmony鴻蒙的關系

    openharmony鴻蒙的關系 openharmony鴻蒙的關系,6月15日,華為發布了一份名為“2021 年 HarmonyOS 2 全國統一考試”的考卷,題型有聽力題、單選題
    的頭像 發表于 06-21 19:56 ?2312次閱讀
    <b class='flag-5'>openharmony</b>和<b class='flag-5'>鴻蒙</b>的關系

    華為openharmony鴻蒙 2.0

    華為openharmony鴻蒙 2.0 IT之家 5 月 17 日消息 微博博主 @釗哥科普 此前爆料,華為鴻蒙 OpenHarmony 2.0 從 5 月 16 日開始開源,關鍵代碼
    的頭像 發表于 06-21 20:13 ?2071次閱讀

    openharmony鴻蒙區別

    我們知道華為是開源了鴻蒙系統的,開源的項目叫做OpenHarmony 2.0。華為捐贈給了“開放原子開源基金會”,這樣可以根據不同的訴求來做不同的產品。那么這個開源的OpenHarmony和華為
    的頭像 發表于 06-22 15:14 ?5571次閱讀

    openharmony鴻蒙的區別是什么

    我們都知道,華為鴻蒙系統華為是開源了的,開源項目叫做OpenHarmony 2.0,那么這個開源的OpenHarmony 2.0與華為自家使用的鴻蒙HarmonyOS 2,又有什么區別
    的頭像 發表于 06-23 11:53 ?9981次閱讀
    主站蜘蛛池模板: 亚洲精品国产AV成人毛片| 边摸边吃奶边做下面视频| 狠狠色狠狠色88综合日日91| 亚洲国产精品高清在线| 精品一区二区三区免费观看| 2021国产精品视频一区| 日本激情在线| 国产一区二区在线免费观看| 依恋影院在线观看| 欧美极品尿交| 国产亚洲精品久久久久久白晶晶| 一级特黄aa大片欧美| 欧美亚洲曰韩一本道| 国产欧美一区二区三区久久| 中文文字幕文字幕亚洲色| 日日操日日射| 久久国产免费| 父亲猜女儿在线观看| 在线观看qvod| 甜性涩爱快播| 免费国产成人高清在线看软件 | 琪琪电影午夜理论片YY6080| 国产精品久久久久久久久免费下载 | 亚洲AV无码一区二区色情蜜芽 | 亚洲AV午夜福利精品香蕉麻豆| 久久亚洲伊人| 国产免费福利在线视频| 91综合精品网站久久| 亚洲高清国产拍精品影院| 漂亮的保姆5电影免费观看完整版中文| 国模玲玲自拍337p| 成人免费无毒在线观看网站| 羽月希被黑人吃奶dasd585| 十分钟视频影院免费| 免费伦理片网站| 好看的电影网站亚洲一区| 二次元美女扒开内裤喷水| 538视频这里只有精品| 亚洲精品第五页中文字幕| 色综合精品无码一区二区三区| 美女内射少妇三区五区|