HarmonyNote.TOP鸿蒙开发笔记

部署鸿蒙应用到真机遇到no signature file错误

今天新建了一个鸿蒙应用,写了一些功能后准备部署到NOVA 14真机上测试一下,控制台却报了如下错误信息:

00:13:50.775: Build task in 13 s 500 ms
00:13:50.776: Launching com.xxx.XXOOProject
00:13:50.776: $ hdc shell aa force-stop com.xxx.XXOOProject
00:13:50.983: $ hdc shell mkdir data/local/tmp/94bdd4ba95334d8d8361469488fd7b90
00:13:51.074: $ hdc file send \XXOOProject\entry\build\default\outputs\default\entry-default-unsigned.hap "data/local/tmp/94bdd4ba95334d8d8361469488fd7b90" in 91 ms
00:13:51.218: $ hdc shell bm install -p data/local/tmp/94bdd4ba95334d8d8361469488fd7b90  in 144 ms
Install Failed: error: failed to install bundle.
code:9568320
error: no signature file.
Open signing configs
00:13:52.579: $ hdc shell rm -rf data/local/tmp/94bdd4ba95334d8d8361469488fd7b90
00:13:52.586: Launch com.xxx.XXOOProject failed, starting handle failure progress
Error while Deploy Hap

好在DevEco Studio足够智能,直接点击“Open signing configs”那一行即可直达设置签名配置界面,勾选“Automatically generate signature”,并且需要点击下方的Sign In登录华为账号,完成这两步后即可自动生成签名。如下图所示:

自动签名配置界面

一、修改应用图标

在项目根目录或entry目录右键选择New->Image Asset命令项,即可出现一个辅助生成应用图标的界面,点击确定后会在resources目录下生成六种不同尺寸的图标。如下所示:

XXOOProject/
├── AppScope/          # 应用全局配置目录
├── entry/             # 主应用模块目录
│   ├── build/         # 构建输出目录
│   └── src/           # 源代码目录
│       └── main/      # 主代码目录
│           ├── ets/   # ArkTS代码目录
│           │   ├── entryability/        # 入口能力目录
│           │   │   └── EntryAbility.ets  # 应用入口文件
│           │   ├── entrybackupability/  # 备份能力目录
│           │   └── pages/               # 页面目录
│           │       └── Index.ets        # 首页文件
│           └── resources/               # 资源文件目录
│               ├── base/                # 基础资源目录
│               │   ├── dark/             # 深色模式资源
│               │   └── elements/        # 元素资源(尺寸/字符串等)
│               ├── phone-ldpi/          # 低分辨率资源目录
│               ├── phone-mdpi/          # 中分辨率资源目录
│               ├── phone-sdpi/          # 标准分辨率资源目录
│               ├── phone-xldpi/         # 较高分辨率资源目录
│               ├── phone-xxldpi/        # 高分辨率资源目录
│               └── phone-xxxldpi/       # 超高分辨率资源目录
│                   ├── media/          # 媒体资源目录
│                   │   ├── icon.png               # 应用图标
│                   │   └── icon_startwindow.png  # 启动页图标
│                   └── rawfile/        # 原始资源文件目录
│               └── module.json5        # 模块配置文件
└── build/             # 项目构建目录

在\XXOOProject\AppScope/resources/base/media和\XXOOProject\entry/src/main/resources/base/media目录下都有background.png、foreground.png这两个文件,应用的桌面图标是由\XXOOProject\AppScope/resources/base/media目录下background.png、foreground.png这两个文件合成显示出来的效果,可根据需要替换这两个png文件。

\XXOOProject\entry/src/main/resources/base/media/startIcon.png这个文件是在点击桌面图标启动应用的瞬间显示的。

二、修改应用名称

在\XXOOProject\entry\src\main\resources目录下如果没有多语言包目录,可以自己新建两个en_US和zh_CN,然后再建一个子目录element,将/XXOOProject/entry/src/main/resources/base/element/string.json文件拷贝过来,然后修改EntryAbility_label对应的value值,示例如下:

{
  "name": "EntryAbility_label",
  "value": "应用名"
}

因为应用名是在\XXOOProject\entry\src\main\module.json5中第21行的label配置的,如下所示:

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet",
      "2in1"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:layered_image",
        "label": "$string:EntryAbility_label",  // 应用名
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          //...
        ]
      }
    ],
    "extensionAbilities": [
      //...
    ]
  }
}

应用名字段优先级顺序为:zh_CN/element/string.json::EntryAbility_label(第一优先级),base/element/string.json::EntryAbility_label(第二优先级),en_US/element/string.json::EntryAbility_label(第三优先级)