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