Compilação e construção do Openharmony - Parte Avançada 2

Continuando com o artigo anterior Compilação e Construção do Openharmony - Parte Avançada 1, são explicadas as duas situações de como adicionar um módulo ao sistema padrão, ou seja, dispositivo L2, no Openharmony V3.1. Este artigo explica a terceira situação.

4. Crie um novo subsistema e adicione módulos aos componentes do subsistema

1. Configure BUILD.gn no diretório do módulo e selecione o modelo correspondente de acordo com o tipo

2. Crie um novo bundle.json contendo os componentes do módulo

As duas primeiras etapas não são diferentes dos dois métodos introduzidos anteriormente.

3. Modifique //build/subsystem_config.json

Por exemplo: Crie um novo test_subsystem no diretório base e mova o bundle.json e o BUILD.gn criados na primeira e na segunda etapas.

Modifique "subsistema" em bundle.json: "test_subsystem" e modifique subsystem_name = "test_subsystem" e part_name = "" em BUILD.gn.

{
  "ace": {
    "path": "foundation/ace",
    "name": "ace"
  },
  "ai": {
    "path": "foundation/ai",
    "name": "ai"
  },
  "account": {					# 子系统
    "path": "base/account",		# 子系统目录
    "name": "account"			# 子系统名称
  },
  # 新增示例如下:
  "test_subsystem": {
    "path": "foundation/test_subsystem",
    "name": "test_subsystem"
  }, 
...
}

4.//productdefine/common/products/rk3568.json adiciona o componente "account:os_account_test":{}

Não mais.

Execute em Openharmony

./build.sh --product-name rk3568

Após a conclusão da compilação, o arquivo executável compilado e a biblioteca dinâmica podem ser encontrados no diretório //out/rk3568/test_subsystem/.

5. Outros modelos de BUILD.gn

Alguns tipos de modelos comumente usados:

# 生成系统hap
ohos_hap	
# 拷贝文件
ohos_copy
# 源目标集合
ohos_source_set
# 执行脚本,支持shell、python
action
# 工作集
group
# 配置集合
config

exemplo ohos_hap :

ohos_hap("clock")
  hap_profile = "./src/main/config.json" # config.json
  js_assets = ["./src/main/js/defaults"]
  raw_assets = ["./raw_assets"]
  resources = ["./src/main/resources"]
  shared_libraries = ["//third_party/libpng:libpng"] # native库
  certificate_profile = "../signature/systemui.p7b"	 # Cer文件
  hap_name = "SystemUI-NavigationBar" 	# hap包名字
  part_name = "prebuilt_hap"
  subsystem_name = "application"
}
  • Declare um alvo hap, que irá gerar um pacote hap, que eventualmente será empacotado na imagem do sistema.

  • Variáveis ​​suportadas

1.hap_profile: config.json do pacote hap

2.js_assets: recursos js, compilados e colocados no diretório assets/js/default

3.raw_assets: ativos originais, esses ativos serão copiados diretamente para o diretório de ativos do pacote hap

4.resources: Arquivos de recursos, compilados e colocados no diretório assets/entry/resources

5.deps: dependências do alvo atual

6.shared_libraries: bibliotecas nativas das quais o destino atual depende

7.hap_name: O nome do pacote hap, opcional, o padrão é o nome do destino

8.final_hap_path: Os usuários podem especificar a localização do hap gerado, opcional, final_hap_path substituirá hap_name

9.subsystem_name: O nome do subsistema ao qual pertence o pacote hap deve corresponder ao nome em bundle.json, caso contrário não será instalado na imagem do sistema.

10.part_name: O nome da parte à qual pertence o pacote hap. O mesmo que nome_do_subsistema

11.js2abc: Você precisa converter o pacote hap em bytecode ARK?

12.certificate_profile: arquivo de autorização correspondente ao hap, usado para assinatura

13.certificate_file: Arquivo de certificado, arquivo de certificado e arquivo de autorização. Os desenvolvedores de aplicativos precisam se inscrever no site oficial do openharmony

14.keystore_path: arquivo keystore, usado para assinatura

15.keystore_password: senha do keystore, usada para assinatura

16.key_alias: apelido da chave

17.module_install_name: nome do pacote hap durante a instalação

18.module_install_dir: O local onde está instalado no sistema. É instalado no diretório system/app por padrão.

Exemplo ohos_source_set:

ohos_source_set("glib_source") {
  source = [
  	"glib/deprecated/gallocator.c",
  	"glib/deprecated/gcache.c",
  	"glib/deprecated/grel.c",
  	...
  ]
  configs = [ ":glib_config"]
}

ohos_shared_library("glib") {
  deps = [ ":glib_source"]
  part_name = "multimedia_media_standard"
  subsystem_name = "multimedia"
}

exemplo de ação:

action("gen_config_header") {
  script = "//third_party/ffmpeg/ohos_config.sh"
  
  args = [
    rebase_path("//third_party/ffmpeg", root_build_dir),
    rebase_path("${target_gen_dir}/include/", root_build_dir),
  ]
  
  outputs = [ "${target_gen_dir}/include/config.h"]
}

6. Mecanismo operacional de compilação e construção do Openharmony

O processo de compilação e construção no lado do Openharmony inclui principalmente análise de linha de comando de compilação, chamada de gn e execução de ninja:

  • Análise de linha de comando: analisa o nome do produto a ser compilado e carrega configurações relevantes

  • Chame gn: configure a cadeia de ferramentas de compilação e as opções de compilação global com base no nome do produto e no tipo de compilação analisado na linha de comando

  • Execute ninja: inicie a compilação e gere a versão do produto correspondente.

Acompanhamento mais emocionante

1. Os processos de compilação e construção de L0 e L1 e o processo de construção subsequente de V3.2 são ligeiramente diferentes, mas se você entender o mecanismo operacional de compilação e construção do Openharmony, poderá entender o processo de compilação do produto correspondente. Se seus amigos técnicos tiverem dúvidas a esse respeito, você pode deixar uma mensagem ou mensagem privada, ou se houver relativamente muitos amigos fazendo perguntas, você pode abrir outro artigo para analisar e explicar.

2. Amigos e entusiastas de tecnologia que desejam conhecer os subsistemas ou frameworks relevantes do Openharmony podem deixar uma mensagem ou enviar uma mensagem privada.

Acho que você gosta

Origin blog.csdn.net/procedurecode/article/details/128835042
Recomendado
Clasificación