游戏发行之鸿蒙SDK

1,828 阅读4分钟

游戏发行之鸿蒙SDK

大家好,我是村长,本篇文章向大家分享下游戏发行的鸿蒙SDK实现方案。

需求背景

随着纯血鸿蒙(不再兼容android包)的发布,对于游戏发行来说,相当于要重新开发一款鸿蒙游戏SDK。这时候就面临以下几个问题。

问题

鸿蒙是否有类似Android aar一样的文件,提供给研发接入?

答:鸿蒙可以将代码和资源封装成Har,类似于Android的aar文件。研发可将Har文件放入工程,并进行依赖。

鸿蒙SDK如何实现界面开发?

答:目前鸿蒙SDK实现界面开发有两种思路,一种是使用自定义Dialog来完成界面开发。一种则是封装好一个对外View,让研发嵌套进游戏主页面中(本文详细讲解这种开发方案)。

鸿蒙是否支持二次重打包?

答:鸿蒙截止目前,不支持对App包进行二次重签名,从而无法实现二次重打包。如果SDK有变更,只能重新出Har给研发重新接入,并由研发出游戏包。

界面开发

开发语言

开发界面前,首先要搞明白鸿蒙可以用什么语言进行开发。 目前鸿蒙支持ArkTS语言和TypeScript语言进行混合开发。但需要注意以下几个问题

1、调用关系

他们之间并不是可以相互调用的关系。 image.png

2、语言的使用场景

UI的编写,必须使用ArkTs编写。工具类则可以使用ArkTs/TypeScript

注意事项

我们对外提供给研发调用的方法文件(除了View),必须使用TypeScript编写。避免因为使用了ArkTs,而研发的类为TypeScript无法调用。

SDK页面如何嵌套进游戏主页面?

我们首先需要先了解一下鸿蒙的层叠布局(Stack),才能够理解如何将SDK页面嵌套进游戏主页面中。

层叠布局(Stack)介绍

鸿蒙的层叠布局类似于Android的FrameLayout布局。后放入的View,会覆盖在之前的View上面。 image.png

研发添加SDK View

由于鸿蒙是声明式UI,所以需要让研发在游戏主界面中,使用层叠布局(Stack)将我们的SDK View添加在最下面。这样 SDKContainerView 的内容可以展示在游戏内容之上。

struct Index {

  build() {
    Stack() {
      ......
      //游戏主界面View
      ......
      //SDK的View
      SDKContainerView()
    }
    .width('100%')
    .height('100%')
  }
}

SDKContainerView代码实现

上面已经实现了SDK View的占位,接下来就讲解一下SDKContainerView的实现。 众所周知,一款游戏SDK包含了非常多的页面,比如登录页,注册页,社区活动页等。

问题

细心的小伙伴不禁会发出疑问,上面只是放了一个View。如何能够实现多界面的展示和切换呢?

实现逻辑

上面的SDK view实际上只是一个提供展示其他页面的容器。可以在其中设置状态变量来动态切换需要展示的页面。

@State装饰器

@State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。

代码实现逻辑
@Preview
@Component
export struct SDKContainerView {
  //初始状态为空页面,不展示任何内容
  @State viewType: ViewType = new BlankViewType();
  
  build() {
          //如果当前状态为登录页面,则展示登录页
          if (this.viewType && this.viewType instanceof LoginViewType) {
          LoginView()
        }
           //如果当前状态为注册页面,则展示注册页
          if (this.viewType && this.viewType instanceof RegisterViewType) {
          RegisterView()
        }
  }
  
  //在执行其build()函数之前执行,设置viewType的监听
  aboutToAppear() {
    //其他SDK类可以通过ViewStateManager来修改viewType值
    //从而显示相对应的页面
    ViewStateManager.observe({
      change: (type: ViewType) => {
        this.viewType = type
      }
    })
    }
}

总结

到此就已经介绍完鸿蒙SDK 界面开发,以及如何让研发嵌套SDK的流程。该方案的优点相对于用自定义Dialog,可操作空间更大。界面改动时,更加方便灵活。 当然它也存在一些缺点,研发需要修改游戏主界面,才能够让SDK显示界面(对研发的代码存在一定的侵入性)

欢迎讨论

由于篇幅有限,上述主要分享了鸿蒙SDK的界面开发实现逻辑,希望对一些小伙伴有帮助。如果有任何问题或更好的方案,欢迎大家评论区一起讨论~