鸿蒙工程签名编译和上架

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

    在平时开发中,我们可能关注签名不多,大家一般直接用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包,竟然不通过

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

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

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

 

<think>嗯,用户问的是React Native如何编译上架鸿蒙系统。首先,我需要确认React Native是否支持鸿蒙系统。因为React Native主要是针对AndroidiOS的,而鸿蒙OS虽然兼容安卓应用,但如果是纯鸿蒙应用的话可能需要不同的处理。 接下来,我应该考虑鸿蒙应用的开发工具。鸿蒙有自己的IDE,比如DevEco Studio,使用ArkTS或Java作为开发语言。React Native本身生成的是JS bundle,可能无法直接运行在鸿蒙上。这时候可能需要一些转换或者适配。 然后,用户可能需要将现有的React Native代码迁移到鸿蒙。这里可能需要用鸿蒙的JS框架,比如ACE(Ability Cross-platform Engine),它支持JS开发。或许可以将React Native的组件映射到鸿蒙的UI组件上,但这需要一定的改造工作。 另外,编译打包方面,鸿蒙应用使用.hap格式,而React Native通常生成的是APK。所以可能需要通过鸿蒙的构建工具重新打包,调整配置,比如修改build.gradle或者使用鸿蒙的构建插件。 还有,鸿蒙的应用发布流程安卓不同,需要在华为开发者联盟注册,生成签名证书,然后上传到AppGallery。需要指导用户如何完成这些步骤,包括测试审核的注意事项。 可能还需要考虑兼容性问题,比如API的差异,第三方库是否支持鸿蒙,以及性能优化方面的问题。如果遇到不兼容的情况,可能需要寻找替代方案或者自行实现部分功能。 总结下来,步骤大概是:环境准备、代码适配、编译打包、测试调试、上架发布。每个环节都需要详细说明,并且提醒用户可能遇到的挑战,比如组件不兼容或性能问题,建议逐步迁移充分测试。</think>React Native(RN)应用编译上架鸿蒙HarmonyOS)的流程需要结合鸿蒙生态特性进行调整。以下是分步骤说明: --- ### 一、当前环境分析 1. **鸿蒙应用开发基础** - 鸿蒙应用使用 **ArkTS/JS/Java** 开发,IDE为 **DevEco Studio** - 应用格式为 `.hap`(Harmony Ability Package) - 应用商店为 **华为应用市场(AppGallery)** 2. **RN与鸿蒙的兼容性** - RN默认生成Android/iOS应用,**不直接支持鸿蒙原生开发** - 需通过**跨平台适配方案**将RN代码转换为鸿蒙可执行格式 --- ### 二、关键实现路径 #### 方案1:通过鸿蒙JS框架兼容 1. **使用ACE引擎(JS跨平台能力)** ```javascript // RN组件需映射为鸿蒙组件 import { View, Text } from '@ohos/arkui' function App() { return ( <View> <Text>Hello HarmonyOS</Text> </View> ) } ``` - **限制**:需重写部分RN组件逻辑,无法直接复用全部代码 #### 方案2:构建鸿蒙原生壳应用 1. **步骤** - 用DevEco Studio创建鸿蒙工程 - 将RN打包的JS Bundle嵌入Web组件 ```arkts // 鸿蒙端加载RN Bundle import webview from '@ohos.web.webview' build() { Column() { Web({ src: 'js/resources/index.js' }) } } ``` - **缺点**:性能损耗较高,部分原生API需桥接实现 --- ### 三、编译上架流程 1. **环境准备** - 安装DevEco Studio 3.0+ - 配置鸿蒙签名证书(需华为开发者账号) 2. **构建配置** ```gradle // build-profile.json5 配置示例 { "app": { "bundleName": "com.example.rn2harmony", "apiType": "harmony", "deviceTypes": ["phone", "tablet"] } } ``` 3. **上架步骤** - 登录[华为开发者联盟](https://developer.huawei.com) - 创建应用 → 提交.hap包 → 通过审核 → 发布至AppGallery --- ### 四、注意事项 1. **API差异** - 鸿蒙JS API与React Native不兼容(如网络请求、文件系统) - 需封装**Native Modules**桥接鸿蒙原生能力 2. **性能优化** - 避免复杂布局嵌套 - 使用鸿蒙原生组件替代部分RN组件 3. **测试重点** - 鸿蒙特有功能(如原子化服务、跨设备流转) - 多设备适配(折叠屏、智慧屏等) --- ### 五、替代方案建议 若项目复杂度高,可考虑: 1. **使用鸿蒙原生开发**(推荐对性能要求高的场景) 2. **Flutter鸿蒙适配**(社区已有早期支持方案) 建议先通过小模块验证技术可行性,再逐步推进完整迁移。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值