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.