HarmonyOS鸿蒙Next中已经存在ASCF-src文件夹的情况下,entry下的ets文件还能运行吗

HarmonyOS鸿蒙Next中已经存在ASCF-src文件夹的情况下,entry下的ets文件还能运行吗 【问题描述】:从.mp-harmony拷贝文件到deveco studio中运行

【问题现象】:运行程序后默认执行ascf-src中的vue页面 想实现vue前端和ets之间的交互​

【版本信息】:DevEco Studio 6.0.1 Release

【复现代码】:包括不限于页面跳转 数据传递,相当于前端代码和原生之间的交互

cke_18829.png


更多关于HarmonyOS鸿蒙Next中已经存在ASCF-src文件夹的情况下,entry下的ets文件还能运行吗的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者你好,参考以下方案:

  1. Entry下的ets文件还能运行吗? 可以运行。entry/src/main/ets/pages/Index.ets是整个ASCF元服务的外壳,负责拉起ascf/ascf_src/pages/index中的js/hxml/css工程文件。但是Index.ets由框架自动生成,修改后点击编译又会被覆盖。

  2. Vue前端和ets之间的交互应该如何实现? 在ASCF框架下,对应的应该是“ASCF页面(实际是类Vue语法的宿主环境)”与“H5页面” 之间的交互,外层是ASCF的JS容器(类似小程序),内层是标准的Web页面。也就是说在ASCF框架下想要实现问题中的“页面跳转 数据传递”,需要在ASCF侧(ascf/ascf_src/pages/index/index.js)使用web-view组件中的has.ascfweb.navigateTo以及has.ascfweb.postMessage方法,H5不能直接调用API(如路由跳转),必须发消息给ASCF侧,让ASCF侧去执行。

更多关于HarmonyOS鸿蒙Next中已经存在ASCF-src文件夹的情况下,entry下的ets文件还能运行吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,如果ASCF-src文件夹已存在,entry下的ets文件仍可正常运行。ASCF-src主要用于存放C++代码,而ets文件是ArkTS的UI代码,两者互不干扰。系统会分别编译处理,不会影响ets文件的执行。

在HarmonyOS Next中,当项目根目录存在ASCF-src文件夹时,这通常意味着项目采用了混合开发模式,即同时包含Web前端(Vue/HTML5)和ArkTS(ETS)原生代码。在这种情况下,entry下的ETS文件可以运行,但项目的默认入口和路由行为会受到影响。

核心机制

  1. 混合模式入口
    当检测到ASCF-src文件夹时,HarmonyOS会优先将Web页面(如Vue编译后的内容)作为应用启动的默认首页。这是因为混合模式下,Web页面通常作为主容器,通过Web组件承载。

  2. ETS代码仍可运行
    entry/src/main/ets中的ArkTS代码会正常编译,并作为原生能力层存在。您可以通过以下方式实现交互:

    • Web调用ETS:在Vue页面中通过Web组件的消息通道(postMessage)调用ETS侧注册的事件处理器。
    • ETS控制Web:通过WebController执行JavaScript代码或监听Web事件。

关键配置检查

  • 路由控制
    检查entry/src/main/resources/base/profile/main_pages.json,确认首页路由是否指向了Web页面(例如配置了"src": "pages/Index",而Index中使用了Web组件加载Vue)。
  • Web组件配置
    在ETS页面中,若需加载Vue页面,需使用Web组件并指定ASCF-src中的资源路径(如$rawfile('vue/index.html'))。

实现交互的示例

假设要在Vue页面跳转到ETS页面:

  1. Vue侧发送消息
    // Vue页面中
    window.hap?.postMessage({ action: 'navigateTo', page: 'ETSPage' });
    
  2. ETS侧接收并跳转
    // ETS页面中的Web组件控制器
    webController.onMessageEvent((event) => {
      if (event.data.action === 'navigateTo') {
        router.pushUrl({ url: 'pages/ETSPage' });
      }
    });
    

注意事项

  • 若需直接启动ETS页面作为首页,可临时重命名或移除ASCF-src文件夹,但会失去混合开发能力。
  • 确保DevEco Studio中已正确安装ArkUI和Web相关依赖。

总结:ETS文件可以正常运行,但需通过Web组件的消息通道与Vue前端协同工作。混合模式的设计初衷是结合Web的快速开发与原生性能,因此入口管理需遵循其框架约定。

回到顶部