【鸿蒙生态共建】鸿蒙6适配-API变化与兼容(1.基础能力篇)-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

161 阅读8分钟

HarmonyOS开发者版本6.0.0(API 20)Release(鸿蒙6) 在2005年9月25日正式发布。相对于HarmonyOS 5.0版本增加了多项新能力及对已有能力的优化。同时也有部分API进行了变更。

本篇内容是《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》这本书整体内容的延续,是咱这本书读者的福利,内容以本书的示例作为基础,适配鸿蒙6过程中,所需要完成的调整。并将这些调整记录分享给大家,本篇内容主要介绍与基础能力相关的鸿蒙6兼容适配。

对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习

往期福利:

  1. 【页面路由导航】三步实现页面跳转的完整示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  2. 【鸿蒙生态共建】一文10个示例讲懂鸿蒙系统ArkTS中的null与undefined的区别与应用-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  3. 【鸿蒙生态共建】一文两表三实例讲清async函数与普通函数的区别-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  4. 【鸿蒙生态共建】一文说清基础类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  5. 【鸿蒙生态共建】一文说明兼容版本、目标版本和编译版本的区别与应用实践-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
  6. 【鸿蒙生态共建】一文说清复杂类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

1: WARN: The project has not explicitly set the 'targetSdkVersion' version at build-profile.json5. It is recommended to configure it.

该警告提示如下图所示,在本书中的示例代码均是以DevEco Studio 5.0版本创建,该版本创建的项目默认是没有targetSdkVersion配置项,本书的示例中在使用DevEco Studio均会提示该警告,解决该警告,可参考我在之前发表的这篇文章。

【鸿蒙生态共建】一文说明兼容版本、目标版本和编译版本的区别与应用实践-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

2: windowStage.on/off Function may throw exceptions. Special handling is required.

在鸿蒙系统中,App可以通过windowStage.on来监听WindowStage生命周期的变化,处理App活动、非活动、显示、隐藏等事件。常见的写法为在onWindowStageCreate方法中,增加事件监听及处理代码,示例如下:

windowStage.on('windowStageEvent', (data) => {
  let stageEventType: window.WindowStageEventType = data;
  switch (stageEventType) {
    case window.WindowStageEventType.SHOWN:
      hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent SHOWN.');
      break;
    case window.WindowStageEventType.ACTIVE:
      hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent ACTIVE.');
      break;
    case window.WindowStageEventType.INACTIVE:
      hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent INACTIVE.');
      break;
    case window.WindowStageEventType.HIDDEN:
      hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent HIDDEN.');
      break;
    // ...
    default: 
      break;
  }
});

在DevEco Studio 6.0版本以编译上述代码时会提示警告Function may throw exceptions. Special handling is required.如下图所示

   

将上述代码增加try catch,警告即可解除,对应的off也需要使用这种方式来解除警告。

try {
  windowStage.on('windowStageEvent', (data) => {
    let stageEventType: window.WindowStageEventType = data;
    switch (stageEventType) {
      case window.WindowStageEventType.SHOWN:
        hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent SHOWN.');
        break;
      case window.WindowStageEventType.ACTIVE:
        hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent ACTIVE.');
        break;
      case window.WindowStageEventType.INACTIVE:
        hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent INACTIVE.');
        break;
      case window.WindowStageEventType.HIDDEN:
        hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent HIDDEN.');
        break;
      // ...
      default:
        break;
    }
  });
} catch (exception) {
  hilog.info(0x0000, '俩毛豆', '%{public}s', `Failed to on the listener for window stage event changes. Cause: ${JSON.stringify(exception)}`);
}

3: 'getContext' has been deprecated.

在ArkTS语言中,getContext接口可以获取与页面上下文组件关联的Context对象,如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的UIAbilityContext或ExtensionContext。

但是,从API version 18开始废弃,官方建议使用UIContext中的getHostContext替代。当使用getContext时,编译会报警告如下图所示。

  

从API version 12开始,可以通过使用UIContext中的getHostContext来明确UI的执行上下文。也就是说,如果App仅在HarmonyOS NEXT(API 12之上)运行,那么默认的使用getHostContext接口,就可以实现获取当前页面关联的Context对象。

那么对于getContext接口将要废弃如何修改呢,主要有两个方面:

  • 如果是在UI组件中使用的getContext接口,则可以使用this.getUIContext().getHostContext()
  • 如果是在非UI组件中使用的getContext接口,则可以先将this.getUIContext().getHostContext()存储在全局存储区中(例如使用AppStorage、全局管理类等方式将该值存储),在需要时获取该值即可。在整个HAP中该值是唯一的,可以在第一个页面开始加载时存储。

4: router.pushUrl() 'pushUrl' has been deprecated.

页面跳转是App运行必要的底层支持能力,在HarmonyOS NEXT中提供多种方式实现页面跳转的能力,在本书中,部分章节的内容,页面跳转主要使用router.pushUrl()来实现从当前页面跳转到另一页面,现阶段官方推荐的页面跳转方式为导航的方式。

比如本书的部分章节中的示例,在编译时会有'pushUrl' has been deprecated.警告提示,如下图所示。

规避该警告的方式,可以使用导航路由,在咱们的《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利系列之前的内容中有介绍,详情可参考以下链接内容。

【鸿蒙生态共建】【页面路由导航】三步实现页面跳转的完整示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

5: router.getParams() 'getParams' has been deprecated.

在使用router时,在页面跳转时,可以指定参数。目标页面可以使用router.getParams()获取源页面传入的参数。同样,现阶段router.getParams()也是将要废弃的状态。在编译时会有 'getParams' has been deprecated.警告提示,如下图所示。

 规避该警告的方式,可以使用导航路由,在咱们的《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利系列之前的内容中有介绍,详情可参考以下链接内容。

【鸿蒙生态共建】【页面路由导航】三步实现页面跳转的完整示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利

总结:

本文基于《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》,为开发者提供鸿蒙6适配指南,涵盖API变更、编译警告处理等,提供5个关键适配方案:1)通过try-catch处理windowStage.on/off异常警告;2)使用getHostContext替代已废弃的getContext接口;3)采用导航路由替代将被弃用的router.pushUrl/getParams方法;4)解决targetSdkVersion未配置警告;5)优化数据类型转换处理。

对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习