鸿蒙工程签名编译和上架

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

在平时开发中,我们可能关注签名不多,大家一般直接用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的编译脚本

bash 复制代码
#!/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的编译脚本

bash 复制代码
#!/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包,竟然不通过

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

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

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

相关推荐
Robot25112 分钟前
「华为」人形机器人赛道投资首秀!
大数据·人工智能·科技·microsoft·华为·机器人
鸿蒙布道师14 分钟前
鸿蒙NEXT开发动画案例5
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
小诸葛的博客8 小时前
华为ensp实现跨vlan通信
网络·华为·智能路由器
康康这名还挺多10 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach
晚秋大魔王13 小时前
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库
linux·开源·harmonyos
python算法(魔法师版)17 小时前
.NET 在鸿蒙系统上的适配现状
华为od·华为·华为云·.net·wpf·harmonyos
bestadc18 小时前
鸿蒙 UIAbility组件与UI的数据同步和窗口关闭
harmonyos
枫叶丹419 小时前
【HarmonyOS Next之旅】DevEco Studio使用指南(二十二)
华为·harmonyos·deveco studio·harmonyos next
ax一号街阿楠21 小时前
华为FAT AP配置 真机
网络·华为·智能路由器
吗喽对你问好21 小时前
华为5.7机考第一题充电桩问题Java代码实现
java·华为·排序