鸿蒙工程签名编译和上架

news2025/1/4 17:30:41

    作为一个开发者,当你把自己的应用开发完了,准备上架到应用市场的时候,就需要用签名文件进行编译和应用上架了,本文介绍如何把一个鸿蒙工程进行签名编译和上架。

    在平时开发中,我们可能关注签名不多,大家一般直接用DevEco-Studio自带的自动签名方式在真机或者模拟器上调试。

    当你想获取自己应用的hap包或者app包的时候,可以点击Build Hap或者Build APP去生成对应的hap或者app包

但是你会发现,生成的是没有签名的包

没有签名的包是不能上架应用商店的,如何申请签名并编译上架呢,下边具体讲一讲

1、证书申请

    鸿蒙的证书比Android要多一个,Android只有一个keystore文件。鸿蒙需要申请2个,一个是发布证书(类似于keystore),代表的是某个组织和个人,可以给该组织或者个人开发的所有应用进行签名。另一个是发布Profile文件,这个代表的是某个应用的,这个应用自身的一些信息,包括包名、应用权限、允许调试设备列表等。

1.1 本机申请秘钥文件和证书请求文件

    官方文档链接在此  文档中心    

    先申请秘钥文件,格式是.p12。和证书请求文件,格式是.csr。可以通过DevEco-Studio直接申请,Build-->Generate key and CSR。填写下表,有效期最多100年,一个公司能活100年,知足了。好像也能用keytool命令生成,不过我没有试过。

点Next,选择csr文件的保存路径

点finish,可以看到,本机生成了两个证书

1.2 申请发布证书

登录华为的AppGallery Connect,申请发布证书。官网链接,需要登录,AppGallery Connect

点击“证书、APP ID 和Profile”

点击“新增证书”,因为工作关系,我很早之前就搞过鸿蒙开发,那时候还是用Java的API,不过证书已经过期了

填写证书名称以及类型就可以了,选择刚才2.1生成的csr文件,

可以看到新申请的证书,调试证书半年有效期,发布证书2年有效期。不过有个问题,发布证书失效了怎么办,通过同一个csr申请的发布证书会被认为是同一个吗,不然应用更新会出问题吧

1.3 Profile文件申请

2.1中说了,这个profile文件是跟应用绑定的,申请之前得先在AppGallery上创建应用

AppGallery Connect

1.3.1应用创建

在APP ID栏目中点击“新建”

按要求填写内容,新建成功

1.3.2设备添加

在添加Profile文件之前,还得先添加设备,因为创建调试类型的Profile文件需要选择设备。我很早之前添加过鸿蒙设备。

1.3.3添加Profile

然后在Profile栏目中点击“添加”

按要求填写即可

添加之后可以看到自己生成的Profile文件

2、工程中配置签名证书

构建一个鸿蒙应用需要刚才在本地和在线申请的一共4个文件。具体的编译方式有2中,1是直接使用DevEco-Studio的可视化工具编译,另外一种是使用hvigorw写脚本文件,都会介绍一下

2.1 使用DevEco-Studio配置签名信息

点击File-->Project Structure-->Singing Configs,可以看到上来默认用的是DevEco-Studio自带的那个签名

把Automatically generate signature的勾选去掉,然后配置自己之前生成的签名文件。

注意,默认default这个可以配置debug的签名和证书

然后点+,新建一个release配置release版本的签名和证书

点击OK之后,可以打开工程级的build-profile.json5文件,可以看到刚才配置的签名信息,一个default,一个release

2.2 使用可视化工具编译

回到最初的地方,使用如下方式编译release的hap包和app包

可以看到,已经编译出来带签名的hap包和app包了

2.3 使用编译脚本

对于一些团队开发,需要使用编译流水线的场景,2.1的方案就不适用了,这个时候需要使用hvigorw写shell脚本文件进行编译了

hvigor的具体命令可以参考官方文档 文档中心

我就写个加上注释的示例

hap的编译脚本

#!/usr/bin/env bash
set -e

echo "开始执行hap编译脚本..."

# 检查参数,需要指定2个参数
# 参数1 product 指定product进行编译, 编译product下配置的module target。缺省时:默认为default
# 参数2 buildMode 是编译release包,还是debug包。缺省时:构建Hap/Hsp时为debug模式,构建App时为release模式

# 检查参数
echo "product: $1, buildMode: $2"
if [ -z "$1" ]
then
  echo 'buildHap product为空,请检查参数'
  exit 1
fi
if [ -z "$2" ]
then
  echo 'buildHap buildMode为空,请检查参数'
  exit 1
fi

# 构建hap包
hvigorw assembleHap --mode module -p product=$1 -p buildMode=$2 -p --no-daemon

# 删除原目录下的构建产物
rm -rf output

# 如果是release,拷贝mapping文件,方便后续查问题
if [ "$2" = 'release' ]; then
    mkdir -p output/mapping
    cp entry/build/$1/cache/default/default@CompileArkTS/esmodule/release/sourceMaps.json output/mapping
    cp entry/build/$1/cache/default/default@CompileArkTS/esmodule/release/sourceMaps.map output/mapping
    cp -r entry/build/$1/cache/default/default@CompileArkTS/esmodule/release/obfuscation output/mapping
fi
# 拷贝产物到根目录的output文件夹中
cp -r entry/build/$1/outputs/* output

echo "app编译脚本执行完成"

app的编译脚本

#!/usr/bin/env bash
set -e

echo "开始执行app编译脚本..."


# 构建app包
hvigorw assembleApp --mode project -p product=default -p buildMode=release --no-daemon

# 删除原目录下的构建产物
rm -rf output

# 拷贝mapping文件
mkdir -p output/mapping
cp entry/build/default/cache/default/default@CompileArkTS/esmodule/release/sourceMaps.json output/mapping
cp entry/build/default/cache/default/default@CompileArkTS/esmodule/release/sourceMaps.map output/mapping
cp -r entry/build/default/cache/default/default@CompileArkTS/esmodule/release/obfuscation output/mapping
cp entry/build/default/intermediates/loader/default/pkgContextInfo.json output
cp -r build/outputs/* output

echo "app编译脚本执行完成"

执行完,可以看到编译产物

3 应用发布

在AppGallery中点击APP ID栏目,选择自己的应用,在右侧点“发布”

先填写软件的相关信息,此处省略了,主要看app包的上传,点击“软件包管理”-->上传

上传刚才编译的hap包,竟然不通过

看看原因,这也没错误码呀,过期你大爷呀,我刚申请的证书

靠,重新下载了一遍,还是没有成功

又用可视化工具编译产物,也是一样的效果,今天先不解决了

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S7-1200 SCL PEEK 和 POKE 指令使用

使用S7-1200 SCL 编程语言的 PEEK 和 POKE 指令,可以实现对 I/O、M 存储器和数据块的读取或写入。 而通过 POKE_BLK 指令,还可以实现数据区域的复制或移动。 指令适用条件: 只用于 SCL 编程语言;软件从STEP7 Basic/Pro V11 SP2起…

绘制三元图、颜色空间图:R语言代码

本文介绍基于R语言中的Ternary包,绘制三元图(Ternary Plot)的详细方法;其中,我们就以RGB三色分布图为例来具体介绍。 三元图可以从三个不同的角度反映数据的特征,因此在很多领域都得以广泛应用;…

【2025 Rust学习 --- 09 特型和泛型】

特型和泛型 Rust 通过两个相关联的特性来支持多态:特型和泛型。许多 程序员熟悉这些概念,但 Rust 受到 Haskell 类型类(typeclass)的启发,采用 了一种全新的方式。 1、特型是 Rust 体系中的接口或抽象基类。乍一看&a…

位置编码-APE

Transformer 中的绝对位置编码 (以下由gpt 生成) Transformer 的绝对位置编码(Absolute Position Encoding, APE)是用于对序列数据中的位置信息进行建模的一种方法。在 Transformer 的架构中,输入数据(如句…

2025跨年倒计时

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>2025年跨年倒计时</title><style>/* 页…

C#-使用StbSharp库读写图片

一.StbSharp StbSharp是基于C/Stb图形处理库封装的C#接口,支持多种格式PNG/JPG等图片的处理. GitHub链接: GitHub - StbSharp/StbTrueTypeSharp: C# port of stb_truetype.hhttps://github.com/StbSharp/StbTrueTypeSharp二.使用StbSharp创建高度图 创建一张500*500的高度图PN…

MF248:复制工作表形状到Word并调整多形状位置

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

【从零开始入门unity游戏开发之——C#篇43】C#补充知识——值类型和引用类型汇总补充、变量的生命周期与性能优化、值类型和引用类型组合使用

文章目录 一、值类型和引用类型汇总补充1、值类型和引用类型汇总2、值类型和引用类型的区别3、简单的判断值类型和引用类型 二、变量的生命周期与性能优化1、**栈和堆的区别**2、**变量生命周期**3、**垃圾回收&#xff08;GC&#xff09;机制**4、**代码示例与优化**4.1. 临时…

Dockerfile运行指令

1.RUN 在build构建时执行命令。 举例&#xff1a;安装vim Shell命令格式 RUN yum install -y vim Exec命令格式 RUN ["yum","install","-y","vim"] 2.CMD 用于设置容器启动时默认执行的命令或参数。 如果Dockerfile中有多个CMD&a…

无穿戴动作捕捉系统技术解密及多元化运用

在当今科技飞速发展的时代&#xff0c;动作捕捉技术不断革新&#xff0c;无穿戴动作捕捉系统崭露头角。与传统粘贴标记点的动作捕捉技术相比&#xff0c;无标记点动作捕捉技术具有显著优势。它能够在确保高精度捕捉的前提下&#xff0c;以非接触的方式极大地提升被捕捉对象的表…

计算机网络 (10)网络层

前言 计算机网络中的网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…

基于Mosquito源码理解MQTT5.0的属性概念

MQTT 5.0协议相比之前的版本(如MQTT 3.1.1)增加了很多属性,这些属性分布于报文的可变头部(Variable Header)和有效载荷(Payload)中。这些属性大大增强了协议的可扩展性和灵活性,使其能够更好地适应现代物联网应用的复杂需求。 属性的定义在源码包mosquitto-2.0.18/inc…

rk3568之mpp开发笔记记录之摄像头实时码流获取的神秘面纱

前言&#xff1a; 大家好&#xff0c;在上一篇文章里面&#xff0c;我给大家解读了怎么获取imx415-sensor的实时码流的细节&#xff0c;今天开始会解析里面到底是怎么实现的&#xff1f; 提前透露一点&#xff0c;整个摄像头驱动框架和上层调用&#xff0c;都会涉及到v4l2的开发…

Mac电脑python多版本环境安装与切换

我当前是python3.9.6环境&#xff0c;需要使用3.9.8环境&#xff0c;通过brew安装3.9.8版本&#xff0c;然后通过pyenv切换环境 步骤 1: 安装 pyenv brew install pyenv brew install pyenv-virtualenv 步骤 2: 安装 Python 3.9.8&#xff08;使用 pyenv 安装指定版本的 Pyth…

小程序配置文件 —— 14 全局配置 - tabbar配置

全局配置 - tabBar配置 tabBar 字段&#xff1a;定义小程序顶部、底部 tab 栏&#xff0c;用以实现页面之间的快速切换&#xff1b;可以通过 tabBar 配置项指定 tab 栏的表现&#xff0c;以及 tab 切换时显示的对应页面&#xff1b; 在上面图中&#xff0c;标注了一些 tabBar …

Jupyter在运行上出现错误:ModuleNotFoundError: No module named ‘wordcloud‘

问题分析&#xff1a;显示Jupyter未安装这个模板 解决办法&#xff1a;在单元格内输入&#xff1a;!pip install wordcloud

github提交不上去,网络超时问题解决

问题出现的原因&#xff1a; DNS服务器数据不同步&#xff0c;github的服务器发送迁移&#xff0c;在本地缓存的ip地址现在无效了。 解决方案&#xff1a; 1&#xff09;点击这里&#xff0c;查询github.com最新的ip地址 2.0&#xff09;编辑linux系统地址缓存文件&#x…

Windows Subsystem for Linux (WSL)

目录 定义与功能 版本与特点 应用场景 启用 WSL 功能 更新WSL及其内核 下载Linux发行版本 WSL&#xff08;Windows Subsystem for Linux&#xff09;是微软在Windows 10和Windows 11中引入的一项功能&#xff0c;使用户能够在Windows上原生运行Linux的命令行工具和应用程…

图像处理-Ch5-图像复原与重建

Ch5 图像复原 文章目录 Ch5 图像复原图像退化与复原(Image Degradation and Restoration)噪声模型(Noise Models)i.i.d.空间随机噪声(Generating Spatial Random Noise with a Specified Distribution)周期噪声(Periodic Noise)估计噪声参数(Estimating Noise Parameters) 在仅…

Mac 环境 VVenC 编译与编码命令行工具使用教程

VVenC VVenC 是一个开源的高效视频编码器&#xff0c;专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准&#xff0c;主要目的是提供比 HEVC 更高的压缩效率&#xff0c;同时保持或提高视频质量。H.266/VVC…