【公众号搬运】React-Native开发鸿蒙NEXT(2)

999 阅读5分钟

React-Native开发鸿蒙NEXT(2)

原创 悬空八只脚 悬空八只脚 2024年08月08日 23:31 江苏

最近几天实在是忙冒烟了,完全没想着更新公众号。每天上班一样维持八九个小时的开发RN,晚上休息一直在wow靠回想给小号冲级。现在是8月8日晚上10点,聊聊这阶段的开发。
简单看了下统计,在鸿蒙RN里目前已经投入了将近150个小时,整体进度估计完成了1/3。确实是个大工程,但开发难度目前还是感觉低于预期的。这点不得不说遥遥领先做的不错,还没遇到什么大的问题。刨去七月中旬开始那段刚开始接触的时间,最近两周时间的全力开发,基本已经熟悉了现有的开发方式,大部分页面已经变成相对较为单纯的代码搬运工作。一些第三方还需要调查下替代方案。算是有点心得体会了把。这里用QA的方式简单做一点记录。
Q:怎么开始用RN开发鸿蒙NEXT?A:到目前为止,对于用RN来开发所谓的纯血鸿蒙,可以看到在发布会是提到RN支持的(印象中还提到了Flutter),但其中的技术资料,还没有公开。需要先和遥遥领先签个协议(我因为是公司之间的合作,甲方都代为做了)。协议签订后会发开发文档和相关的demo。文档比较全,涉及到如何从0开始搭建一个鸿蒙原生壳工程与RN工程,不复杂。另外像native与js之间的互相通讯,js组件与原生组件的嵌套使用,都有专门篇幅介绍。即便对于我这种基本不熟悉RN新架构的人来说,看看文档也就一步三摇上路了(文档不复杂,篇幅也不大,都是开发的基础,教你怎么直接上路,不整花活挺好)。当中遇到过一个DevEco-Studio里node版本不对的问题,可能是我mac的环境问题,最终和鸿蒙的技术支持视频讨论了下找了个变通方法解决了。
Q:用RN开发的鸿蒙可以跑Android/ios吗?
A:这个问题问了鸿蒙的技术,答复是可以的。能够一套代码跑Android/iOS/鸿蒙NEXT。要不然我也不会选择用RN来开发。js端的页面代码对鸿蒙几乎是无感的。以前判断操作系统的地方现在可能需要加判一个Platform === 'harmory',如果需要针对鸿蒙做特殊的处理。除此以外基本和普通RN开发没有多少区别。Q:RN开发鸿蒙需要特殊的依赖吗?
A:需要,针对RN的"系统版本"和三方依赖,都需要"鸿蒙化的版本"。举几个例子,虽然只要满足RN使用0.72版本创建应用即可,但需要导入两个鸿蒙的RN核心依赖react-native-harmony和react-native-harmony-sample-package。对于三方依赖,如果是纯js库,可以尝试直接使用,能用就行。但如果有原生部分,则必须去gitee.com/react-nativ…
A:应该这么说,所谓的"鸿蒙化"三方依赖,都是基于原来依赖的二开。用法和原来的依赖基本是没有却别的。带来差异的地方是原生端的导入。目前鸿蒙的开发工具还不支持autolink,依赖的原生部分是需要手动去配置的。这点在上面提到的三方依赖网站上依赖的链接里都有详细的说明,一步步照做即可。大体上基本以下几个步骤(js端已经npm install成功后)npm run codegen,生成供harmory使用的替换文件,都在js端的entry文件夹下。

图片

把生成的文件复制到harmony原生工程中。

图片

图片

解压缩本地依赖,把里面harmory文件夹下的xxxx.har复制到原生工程的libs文件夹下。我一般会把文件名后面加上版本号。

图片

在原生工程中添加依赖

图片

如果依赖的src下有cpp,则需要链接cpp

图片

图片

图片

arkTS侧需要修改的代码和cpp其实是类似的。和Android/iOS中在RN实例中加入依赖作用是一样的。

图片

图片

Q:native和js如何通讯?

A:前面已经提到遥遥领先有相关文档。js->native利用RN新架构的turboModule,按照套路来,我没有用codegen生层代码的方式,而是基于demo的turboModule手动修改,这样开发阶段更加灵活便于随时修改。native->js使用的是emitter。注意最终发送消息需要用到RNInstance这个实例类型。

图片

Q:如何查找参考资料?

A:目前来看遥遥领先的开发官网是唯一的主要参考。原因是网上大部分关于鸿蒙的开发资料,都是老版本,而非NEXT版本。NEXT和之前的版本SDK是不一样的也不能通用。参考网上资料可能存在误导(毕竟目前用的开发工具都是Beta版本的,和老版本有较大差异)。看官网资料,除了API,还有个最佳实践挺不错,大量的项目举例,如果涉及到原生页面,找到类似的项目套用都行。

困了,先写到这把。下回分解。


更多内容可关注
我的公众号【悬空八只脚