From 0b3dbf6ba5d9249d07eb94238839d8885fb149e8 Mon Sep 17 00:00:00 2001 From: Alvin Date: Thu, 16 Jul 2026 21:48:19 +0800 Subject: [PATCH] fix(ohos): use Robrix's launcher icon instead of makepad placeholder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cargo-makepad's ohos generator scaffolds the DevEco project from its own template (which ships makepad's placeholder icon) and has no hook to use the project's real icon — unlike the Android path, which reads [package.metadata.makepad.android].icons in Cargo.toml. The project is also regenerated under target/ on every `deveco` run, so the icon can't just be committed into the generated tree. Add Robrix's HarmonyOS launcher icon as a proper layered icon — a transparent cube foreground kept inside the Ø192 safe zone over a solid white background, with the system supplying the mask/elevation (no baked-in card or shadow) — plus apply-app-icon.sh to inject it into the generated DevEco project between `deveco` and `build`. Cube artwork derived from resources/robrix_logo_alpha.png. Verified on a real HarmonyOS device: the launcher now shows the Robrix cube. --- packaging/ohos/README.md | 51 ++++++++++++++++++++++++++++ packaging/ohos/apply-app-icon.sh | 45 ++++++++++++++++++++++++ packaging/ohos/media/app_icon.png | Bin 0 -> 9444 bytes packaging/ohos/media/background.png | Bin 0 -> 987 bytes packaging/ohos/media/foreground.png | Bin 0 -> 12642 bytes packaging/ohos/media/startIcon.png | Bin 0 -> 11916 bytes 6 files changed, 96 insertions(+) create mode 100644 packaging/ohos/README.md create mode 100755 packaging/ohos/apply-app-icon.sh create mode 100644 packaging/ohos/media/app_icon.png create mode 100644 packaging/ohos/media/background.png create mode 100644 packaging/ohos/media/foreground.png create mode 100644 packaging/ohos/media/startIcon.png diff --git a/packaging/ohos/README.md b/packaging/ohos/README.md new file mode 100644 index 000000000..6826aa958 --- /dev/null +++ b/packaging/ohos/README.md @@ -0,0 +1,51 @@ +# HarmonyOS (OpenHarmony) app icon + +Robrix's branded launcher icon for the HarmonyOS build lives here, plus a script +that applies it to the generated DevEco project. + +## Why this exists + +`cargo makepad ohos ... deveco` scaffolds the DevEco project from cargo-makepad's +built-in template. That template ships **makepad's placeholder icon**, and the ohos +generator has **no hook to use the project's real icon** (the Android path does — +it reads `[package.metadata.makepad.android].icons` in `Cargo.toml`). The project is +also regenerated under `target/` on every `deveco` run, so the icon cannot simply be +committed into the generated tree. + +So without this step, Robrix shows the generic makepad icon on the HarmonyOS launcher +instead of the Robrix logo. + +## Files + +| File | Used by | Notes | +|------|---------|-------| +| `media/foreground.png` | `$media:foreground` (layered launcher icon) | 288×288, transparent cube in the Ø192 safe zone | +| `media/background.png` | `$media:background` (layered launcher icon) | 288×288, solid white | +| `media/app_icon.png` | `AppScope/app.json5` → `$media:app_icon` | 216×216, cube on white | +| `media/startIcon.png` | `EntryAbility` → `$media:startIcon` | 288×288, cube on white | + +The launcher icon follows HarmonyOS's **layered icon** convention: a transparent +foreground (the Robrix cube, kept inside the Ø192 safe area) over a solid background, +with the system supplying the mask and elevation — no baked-in card/shadow. The cube +artwork is derived from `resources/robrix_logo_alpha.png`. + +## Build flow + +Run the icon step between `deveco` and `build`: + +```bash +# 1. generate the DevEco project + cross-compile librobrix.so +cargo makepad ohos --deveco-home="/Applications/DevEco-Studio.app/Contents" deveco -p robrix --release + +# 2. inject Robrix's icon (this script) — must come after deveco, before build +packaging/ohos/apply-app-icon.sh + +# 3. package the .hap +cargo makepad ohos --deveco-home="/Applications/DevEco-Studio.app/Contents" build -p robrix --release +``` + +## Follow-up + +The proper long-term fix is upstream: teach cargo-makepad's ohos generator to read the +project's icon (as the Android path already does) and generate the layered icon, which +would make this script unnecessary. diff --git a/packaging/ohos/apply-app-icon.sh b/packaging/ohos/apply-app-icon.sh new file mode 100755 index 000000000..6842a4e15 --- /dev/null +++ b/packaging/ohos/apply-app-icon.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# apply-app-icon.sh — inject Robrix's branded launcher icon into the generated +# OpenHarmony (HarmonyOS) DevEco project. +# +# Why this is needed: +# `cargo makepad ohos ... deveco` scaffolds the DevEco project from cargo-makepad's +# own template, which ships makepad's placeholder icon and has no hook to use the +# project's real icon (unlike the Android path, which reads +# [package.metadata.makepad.android].icons in Cargo.toml). It also regenerates the +# project under target/ on every run, so the icon cannot simply be committed there. +# This script copies Robrix's icons (packaging/ohos/media/) into the freshly +# generated project. +# +# When to run: AFTER `cargo makepad ohos ... deveco`, BEFORE `... build`. +# +# usage: packaging/ohos/apply-app-icon.sh [deveco_project_dir] +# deveco_project_dir defaults to target/makepad-open-harmony/robrix +set -euo pipefail + +HERE="$(cd "$(dirname "$0")" && pwd)" +MEDIA="$HERE/media" +PROJ="${1:-target/makepad-open-harmony/robrix}" + +[ -d "$PROJ" ] || { + echo "error: DevEco project not found at '$PROJ'" >&2 + echo " run 'cargo makepad ohos ... deveco -p robrix' first." >&2 + exit 1 +} + +APPSCOPE_MEDIA="$PROJ/AppScope/resources/base/media" +ENTRY_MEDIA="$PROJ/entry/src/main/resources/base/media" +[ -d "$APPSCOPE_MEDIA" ] && [ -d "$ENTRY_MEDIA" ] || { + echo "error: '$PROJ' does not look like a makepad DevEco project (missing media dirs)" >&2 + exit 1 +} + +# app-level icon (AppScope/app.json5 -> $media:app_icon) +cp "$MEDIA/app_icon.png" "$APPSCOPE_MEDIA/app_icon.png" +# launcher layered icon (media/layered_image.json -> $media:foreground over $media:background) +cp "$MEDIA/foreground.png" "$ENTRY_MEDIA/foreground.png" +cp "$MEDIA/background.png" "$ENTRY_MEDIA/background.png" +# start-window icon (module.json5 EntryAbility -> $media:startIcon) +cp "$MEDIA/startIcon.png" "$ENTRY_MEDIA/startIcon.png" + +echo "Robrix app icon applied to $PROJ" diff --git a/packaging/ohos/media/app_icon.png b/packaging/ohos/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9db2aa029a0adfc885bf8038662e20c8f93538c4 GIT binary patch literal 9444 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 Dke?as literal 0 HcmV?d00001 diff --git a/packaging/ohos/media/background.png b/packaging/ohos/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..87216ab852d0d6d30d73a7267108f3149367f201 GIT binary patch literal 987 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 literal 0 HcmV?d00001