OpenHarmony开发者论坛
标题:
OpenHarmony小型系统 helloworld.hap 的编译和打包
[打印本页]
作者:
坚 果
时间:
2023-11-8 19:14
标题:
OpenHarmony小型系统 helloworld.hap 的编译和打包
[md]# OpenHarmony小型系统 helloworld.hap 的编译和打包
## 源代码
**将 helloworld.tar.gz 解压到 //applications/sample/camera/ 目录下,目录结构为:**
```
./helloworld/
├── README.md # 本文档
├── bundle.json_bak # 这个文件当前配置下用不到,修改编译配置时,可以用到
├── helloworld.hap # 手动打包出来的未签名的hap文件[loongarch64]
├── libhelloworld.so # 编译helloworld代码时生成的动态链接库[loongarch64]
│
│ # 以下是应用程序的源代码文件
├── cert # hap的签名文件,当前签名是无效的
│ └── com.sample.helloworld.invalid_signature.p7b
├── BUILD.gn # 编译生成libhelloworld.so,以及将其与资源一起打包成hap的描述
└── src # helloworld应用程序的源代码
├── config.json # hap的配置信息
├── main
│ ├── event_listener.h
│ ├── main_ability.cpp
│ ├── main_ability.h
│ ├── main_ability_slice.cpp
│ └── main_ability_slice.h
└── resources # hap的icon图标(还可以包含其他的资源)
└── Icon_HelloWorld.png
```
## 编译配置
**编辑 //applications/sample/camera/bundle.json 文件,在"sub\_component"中增加一个组件:**
```
"build": {
"sub_component": [
"//applications/sample/camera/helloworld:helloworld_hap",
......
"//applications/sample/camera/media:media_sample"
],
"inner_kits": [],
"test": []
}
```
**由于 ./helloworld/BUILD.gn 中的 hap\_pack("helloworld\_hap") 里所引用的签名文件是无效的,**
```
# NOTE: invalid_signature, so auto-pack hw.hap will fail
# we need to pack hw.hap manually
# when the cert_profile is valid, hw.hap will be packed and installed automatically
cert_profile = "cert/com.sample.helloworld.invalid_signature.p7b"
```
**编译时无法将生成的 libhelloworld.so 、资源文件以及签名文件进行自动打包以生成 helloworld.hap 应用,因此,需要我们手动打包出未签名的 helloworld.hap 应用。**
## 手动打包未签名的 helloworld.hap
**将编译生成的 //out/../../usr/lib/libhelloworld.so 文件,复制到 //applications/sample/camera/helloworld/目录下(如上面目录树结构中所示),同时在命令行中切换路径到该目录下,执行:**
```
java -jar ../../../../developtools/packing_tool/jar/app_packing_tool.jar --mode hap --json-path ./src/config.json --resources-path ./src/resources --ability-so-path ./libhelloworld.so --out-path ./helloworld.hap
```
**注意,上述命令中的各个路径要准确,否则会无法正确打包相关资源到hap中。**
**正常执行完上述命令后,可以在该目录下生成 helloworld.hap 文件(如上面目录树结构中所示),这是未签名的hap。**
## 手动安装未签名的 helloworld.hap
**将未签名的 helloworld.hap 文件复制到U盘(FAT32格式)根目录下,插入开发板,开发板上电运行到稳定状态之后,依次执行如下命令:**
```
mount -t vfat /dev/sda1 /mnt # 挂载U盘到 /mnt
mount -t vfat /dev/mmcblk1p1 /mnt
bm set -s disable # 关闭系统的签名验证功能,否则无法安装未签名的hap
bm install -p /mnt/helloworld.hap # 安装未签名的hap
# 如果要卸载hap,执行如下命令后,重启开发板即可
bm uninstall -n com.sample.helloworld
```
## 注意事项
1. **小型系统的可烧录镜像中,需要把 bm 工具打包进去才能使用该工具安装hap。**
2. **这个示例程序是使用C++编写的,需要部署到OpenHarmony系统中,跟随OH系统一并进行交叉编译(确保libhelloworld.so为正确的指令集架构下的二进制文件),并按上面的操作进行手动打包和手动安装。**
3. **如果使用DevEco Studio IDE选择js、ets、arkts等语言进行开发,可以直接编译、签名和打包出helloworld.hap 程序,直接用 bm 工具进行安装即可。【注意,此条目未经确认,目前OpenHarmony上的大多数应用示例程序,都是只能运行在标准系统中,因此,需要开发者自行验证该条目是否可行】**
4. **DevEco Studio IDE应该也可以直接编译、签名和打包这个C++语言的app【本条目也未经确认】;应该也可以将签名文件提取出来,替换上面目录中的 com.sample.helloworld.invalid\_signature.p7b 文件,并修改BUILD.gn中的对应名字,重新编译应该就可以自动生成带签名的 helloworld.hap 程序了。**
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5