1 Star 0 Fork 936

ZHAI JUNWEI / build

forked from OpenHarmony / build 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
标准系统如何添加一个模块.md 8.14 KB
一键复制 编辑 原始数据 按行查看 历史
xxlight 提交于 2023-09-24 14:58 . Description: add docs in docs to build

标准系统如何添加一个模块

要添加的模块可以分为以下三种情况,对原有的配置文件进行不同程度的修改。

  • 在原有部件中添加一个模块
  • 新建部件并在其中添加模块
  • 新建子系统并在该子系统的部件下添加模块

在原有部件中添加一个模块

  1. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。

    支持的模板类型:

    ohos_executable
    ohos_shared_library
    ohos_static_library
    ohos_source_set
    
    # 预编译模板:
    ohos_prebuilt_executable
    ohos_prebuilt_shared_library
    ohos_prebuilt_etc

    例子:

    ohos_shared_library示例

    import("//build/ohos.gni")
    ohos_shared_library("helloworld") {
      sources = []
      include_dirs = []
      cflags = []
      cflags_c = []
      cflags_cc = []
      ldflags = []
      configs = []
      deps =[]                    # 部件内模块依赖
    
      # 跨部件模块依赖定义,
      # 定义格式为 "部件名:模块名称"
      # 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块
      external_deps = [
        "part_name:module_name",
      ]
    
      output_name = ""            # 可选,模块输出名
      output_extension = ""       # 可选,模块名后缀
      module_install_dir = ""     # 可选,缺省在/system/lib64或/system/lib下, 模块安装路径,模块安装路径,从system/,vendor/后开始指定
      relative_install_dir = ""   # 可选,模块安装相对路径,相对于/system/lib64或/system/lib;如果有module_install_dir配置时,该配置不生效
    
      part_name = ""              # 必选,所属部件名称
    }

    ohos_executable示例:

    ohos_executable模板属性和ohos_shared_library基本一致

    注意:可执行模块(即ohos_executable模板定义的)默认是不安装的,如果要安装,需要指定install_enable = true

    ohos_prebuilt_etc示例:

    import("//build/ohos.gni")
    ohos_prebuilt_etc("etc_file") {
      source = "file"
      deps = []  				 # 部件内模块依赖
      module_install_dir = "" 	 # 可选,模块安装路径,从system/,vendor/后开始指定
      relative_install_dir = ""  # 可选,模块安装相对路径,相对于system/etc;如果有module_install_dir配置时,该配置不生效
      part_name = "" 			 # 必选,所属部件名称
    }
  2. 修改包含该模块所属部件的ohos.build配置文件

    以下是一个ohos.build文件

    {
      "subsystem": "arkui",
      "parts": {
        "napi": {
          "module_list": [
            "//foundation/arkui/napi:napi_packages"
          ],
          "inner_kits": [
          ],
          "test_list": [
            "//foundation/arkui/napi:napi_packages_test",
            "//foundation/arkui/napi/test/unittest:unittest"
          ]
        }
      }
    }

    文件说明:

    subsystem定义了子系统的名称;parts定义了子系统包含的部件。

    一个部件包含部件名,部件包含的模块module_list,部件提供给其它部件的接口inner_kits,部件的测试用例test_list。

    修改内容:

    要添加一个模块到已有部件中去,只需要在该部件的module_list中添加新加模块的gn编译目标;假如该模块提供给其它模块接口,需要在inner_kits中添加对应的配置;如果有该模块的测试用例,需要添加到test_list中去。

新建部件并在其中添加模块

  1. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。

    这一步与在原有部件中添加一个模块的方法基本一致,只需注意该模块对应BUILD.gn文件中的part_name为新建部件的名称即可。

  2. 修改或者新建ohos.build配置文件

    {
      "subsystem": "子系统名",
      "parts": {
        "新建部件名": {
          "module_list": [
            "部件包含模块的gn目标"
          ],
          "inner_kits": [
          ],
          "test_list": [
            "测试用例",
          ]
        }
      }
    }

    在原有子系统中添加一个新的部件,有两种方法,一种是在该子系统原有的ohos.build文件中添加该部件,另一种是新建一个ohos.build文件,注意无论哪种方式该ohos.build文件均在对应子系统所在文件夹下。

    ohos.build文件包含两个部分,第一部分subsystem说明了子系统的名称,parts定义了该子系统包含的部件,要添加一个部件,需要把该部件对应的内容添加进parts中去。添加的时候需要指明该部件包含的模块module_list,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test_list中说明,inner_kits与test_list没有也可以不添加。

  3. 在productdefine/common/products目录下的产品配置文件(json格式)中添加对应的部件,直接添加到原有部件后即可。

    {
        "parts":{
            "部件所属子系统名:部件名":{}
        }
    }

新建子系统并在该子系统的部件下添加模块

  1. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。这一步与新建部件并在其中添加模块中对应的步骤并无区别。

  2. 在新建的子系统目录下每个部件对应的文件夹下创建ohos.build文件,定义部件信息。这一步与新建部件并在其中添加模块中对应的步骤并无区别。

  3. 修改build目录下的subsystem_config.json文件

    {
      "子系统名": {
        "path": "子系统目录",
        "name": "子系统名",
        ...
      }
    }

    该文件定义了有哪些子系统以及这些子系统所在文件夹路径,添加子系统时需要说明子系统path与name,分别表示子系统路径和子系统名。

  4. 在productdefine/common/products目录下的产品配置如Hi3516DV300.json中添加对应的部件,直接添加到原有部件后即可。

    {
    	...
        "parts":{
            "部件所属子系统名:部件名":{}
        }
    }

    成功添加验证:

    • 在输出文件夹的对应子系统文件夹下的部件文件夹下的BUILD.gn文件中module_list包含了新建模块的BUILD.gn中定义的目标。
    • 编译完成后打包到image中去,生成对应的so文件或者二进制文件

配置文件说明

鸿蒙操作系统的配置文件主要有四个

  1. productdefine/common/products目录下的产品名.json文件

    {
      "product_name": "Hi3516DV300",
      "product_company": "hisilicon",
      "product_device": "hi3516dv300",
      "version": "2.0",
      "type": "standard",
      "parts":{
        "arkui:ace_engine_standard":{},
        "arkui:napi":{},
        "account:os_account":{},
        "distributeddatamgr:native_appdatamgr":{},
        "distributeddatamgr:distributeddatamgr":{},
        "distributeddatamgr:appdatamgr_jskits":{}
      }
    }

    指明了产品名,产品厂商,产品设备,版本,要编译的系统类型,以及产品包含的部件。

  2. build目录下的subsystem_config.json文件

    {
      "arkui": {
        "project": "hmf/ace",
        "path": "foundation/arkui",
        "name": "arkui",
        "dir": "foundation"
      }
    }

    该文件对子系统进行了说明,我们需要该子系统定义中的name与path,分别表示子系统的名称和所在文件夹路径。

  3. 子系统中ohos.build文件

    {
      "subsystem": "arkui",
      "parts": {
        "napi": {
          "module_list": [
            "//foundation/arkui/napi:napi_packages"
          ],
          "inner_kits": [
          ],
          "test_list": [
            "//foundation/arkui/napi:napi_packages_test",
            "//foundation/arkui/napi/test/unittest:unittest"
          ]
        }
      }
    }

    ohos.build文件定义了子系统包含的部件。

    每个部件定义它所包含的模块目标module_list,以及部件间交互的接口inner_kits,测试用例test_list。部件包含的模块目标module_list是必须要说明的。

  4. 每个模块对应的BUILD.gn文件

    可以使用提供的模板,也可以使用gn语法规则自定义编写。

1
https://gitee.com/zhai-junwei/build.git
git@gitee.com:zhai-junwei/build.git
zhai-junwei
build
build
master

搜索帮助