最近在出鸿蒙包,最终去水印需要使用团结云打包,记录一下团结云打包的大概流程

官方文档 欢迎使用团结云开发! | Unity 云开发

需要使用的工具

  1. Tuanjie Devops 团结引擎控制项目和云打包的,以下简称 TD
  2. Platstic SCM 类似git,用于上传本地工程 ,以下简称 PSCM

整体流程

  1. 使用TD添加工程
  2. 将工程上传到PSCM中
  3. 添加工作流和打包脚本
  4. 使用TD触发云打包
  5. TD打包完成后下载制品(导出的鸿蒙工程)
  6. 本地打ab,然后把首包资源拷贝到导出的工程里
  7. 打鸿蒙包
  • 热更新包就直接在本地按原生方式就可以了, 团结云打包只有整包的时候才有用,通过它导出的工程就是没有水印的
  • 大概原理就是把工程上传到PSCM,然后使用TD云打包,团结云会分配一个云打包机,然后把工程拉到本地,然后再执行打包,最终输出的内容(制品)在TD里可以下载

使用TD添加工程

有三种方式,从Git同步、本地同步、Plastichub迁移项目,我使用的是本地同步,其余两种具体方式在官方文档中有。打开TD,登录完成以后,按官方文档操作即可 连接本地项目 | Unity 云开发

将工程上传到PSCM中

使用PSCM上传工程即可,和Git类似,但是要注意看下忽略列表,可能会把工程的某些文件给忽略了,这个有点坑

添加工作流和打包脚本

打包脚本按文档来即可

团结云打包的工作流配置文件,我这里打的是鸿蒙包,使用的鸿蒙配置文件

配置文件中前面可以都不用修改,在构建的步骤里可以根据自己的需求来修改

name: Devops Build
# 更多有关构建工作流的信息,请参考 <https://devops.u3dcloud.cn/help/docs/advanced/yaml>
# 您也可以访问注释中的其它链接来了解更多关于 云构建 action 的使用方法

# 在提交至代码库时触发云构建任务
on: [push]

jobs:
  build:
    name: Build OpenHarmony
    # 为了让工作流可以正常触发,需要指定正确的 runs-on 标签
    # <https://devops.u3dcloud.cn/help/docs/advanced/yaml#%E8%A7%A6%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81>
    runs-on: windows-server-2022-tuanjie-1.2.6-oh-32c-64g
    steps:
      # 从 Unity Devops Version Control 签出项目 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionscheckout-plasticscm>
      - name: Check out project repository
        uses: actions/checkout-plasticscm@v1
        with:
          path: tjcloudbuild

      # 检查签出内容
      - name: List repository content
        run: ls -l ./tjcloudbuild

      # 构建 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionstj-builder>
      - name: Build project
        uses: actions/tj-builder@v3
        id: build-action
        with:
          targetPlatform: OpenHarmony
          openHarmonyApiVersion: 11
          projectPath: ./tjcloudbuild
          buildMethod: Editor.Build.TuanjieCloudBuild.BuildProject
          customParameters: -自定义参数名称1 自定义参数值1 -自定义参数名称2 自定义参数值2 ....
          buildsPath: ./tjcloudbuild/CloudBuild

      # 检查构建结果是否成功生成
      - name: Check build result
        run: ls -l ${{ steps.build-action.outputs.buildsPath }}

      # 上传制品 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionstj-upload-artifact>
      - name: Upload artifact
        uses: actions/tj-upload-artifact@v2
        with:
          name: Build-${{ steps.build-action.outputs.buildVersion }}
          path: ${{ steps.build-action.outputs.buildsPath }

runs-on: windows-server-2022-tuanjie-1.2.6-oh-32c-64g

    name: Build OpenHarmony
    # 为了让工作流可以正常触发,需要指定正确的 runs-on 标签
    # <https://devops.u3dcloud.cn/help/docs/advanced/yaml#%E8%A7%A6%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81>
    runs-on: windows-server-2022-tuanjie-1.2.6-oh-32c-64g

这里需要注意,windows-server-2022-tuanjie-1.2.6-oh-32c-64g 表示你要选择的云打包机配置,一定要先看这个,不然可能会出现云打包机不支持你本地的团结版本 云构建服务器 | Unity 云开发

actions/tj-builder@v3

# 构建 <https://devops.u3dcloud.cn/help/docs/advanced/action#actionstj-builder>
      - name: Build project
        uses: actions/tj-builder@v3
        id: build-action
        with:
          targetPlatform: OpenHarmony
          openHarmonyApiVersion: 11
          projectPath: ./tjcloudbuild
          buildMethod: Editor.Build.TuanjieCloudBuild.BuildProject
          customParameters: -自定义参数名称1 自定义参数值1 -自定义参数名称2 自定义参数值2 ....
          buildsPath: ./tjcloudbuild/CloudBuild

主要就是这一段,with下方的参数中可以填哪些在上方文档里有说明,其余参数可以参照官方文档按需填写,这里主要说一下比较重要的两个参数

  • buildsPath:在这个路径里的内容在云打包结束后我们可以下载,比如我们记录的版本文件什么的就需要放到这个目录下,在打包完成后再手动上传到PSCM中,便于下次打包使用。打包完成的更新包等等,也需要修改目录到这个文件下,这样在打包完成后才能下载到本地。个人测试后推荐方式为都放到统一目录,最后结束的时候拷贝到buildsPath目录下
  • customParameters:格式上放有,我之前的打包方式是通过jenkins,会有一堆环境变量需要获取,在云打包上就只能通过这里来传递,比如以下两个参数
set BuildAll=1  是否打整包
set UpdateApp=0 是否打兼容更新包

现在改为 customParameters: -BuildAll 1 -UpdateApp 0

实际代码中也需要修改,接入云打包之前就直接使用Environment.GetEnvironmentVariable获取Bat里配置的环境变量,现在需要区分团结云打包

public static string GetEnvVar(string envName, bool isTuanjieCloudBuild)
{
    if (isTuanjieCloudBuild)
        return GetArgValue(envName); 
    
    return Environment.GetEnvironmentVariable(envName);
}

public static string GetArgValue(string arg)
{
    var args = System.Environment.GetCommandLineArgs();
    for (var i = 0; i < args.Length; i++)
    {
        if (args[i].Equals($"-{arg}", StringComparison.OrdinalIgnoreCase) && i < args.Length - 1)
        {
            var value = args[i + 1];
            return value;
        }
    }
    
    return "";
}

actions/tj-upload-artifact@v2

上传制品其实就是buildsPath目录下的内容,上传之后才我们的TD里才能下载

使用TD触发云打包

在把配置文件和打包脚本编写好以后就开始测试云打包了,推荐先用空工程测试,不然特别费时间

TD打包完成后下载制品(导出的鸿蒙工程)

点击即可下载

本地打ab,然后把首包资源拷贝到导出的工程里

每个项目不一样,这个就自己根据实际情况去处理了

打鸿蒙包

通过Deveco手动打包或者鸿蒙命令行工具自动化打包,最终打出来的包就是没有水印的了

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐