React Native开发鸿蒙Next---react-native-cameraroll在ArkTS下的接入报错

继续堆社区RN的鸿蒙化。其中有个浏览帖子图片并下载保存到手机相册的功能,在当初开发的时候是先借助react-native-fs把网络图片下载到临时文件夹后,再利用rn自带的CameraRoll另存到相册。在RN新架构中CameraRoll已经从react-native迁移到了社区中。所以就打算直接用react-native-camera-roll直接下载网络图片到相册的方式来实现。camera-roll有鸿蒙化版本@react-native-oh-tpl/camera-roll。按照管理接入。但在ArkTS编译的时候会报错。

ld.lld: error: undefined symbol: rnoh::RNCCameraRollPermission::RNCCameraRollPermission(rnoh::ArkTSTurboModule::Context, std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>>)

codengen生成的src/main/cpp/generated

问题出在createTurboModule方法

看了下camera-roll的源码,发现是在CameraRollTurboModulesFactory中会去动态实例化CameraRollTurboModule与CameraRollPermissionTurboModule导致的。codegen在生成的时候会去匹配TurboModule导致去创建了RNCCameraRoll与RNCCameraRollPermission的turbomodule的cpp并去初始化。这种"二合一"的创建方式导致了codegen生成代码无法准确识别。

处理方式很干脆------删掉createTurboModule中RNCCameraRollPermission的创建即可。

做个测试页面运行一下获取权限,把图片存储到相册都没有问题


  <Button  title="savePhotos"  
  onPress={() => {  CameraRoll.saveAsset("https://res.vmallres.com/uomcdn/CN/cms/202408/5442d69d916d4bcf9ee740d595a164fb.jpg")
  .then((res) => {    console.log('res-----',res);  });}}>
  </Button>

后续遇到这种在Factory中创建多个turbomodeule的依赖需要留意codegen创建的代码,可能需要手动调整(能通过命令调整吗?如有知道的不吝赐教)。

***

不经常在线,有问题可在微信公众号或者掘金社区私信留言

更多内容可关注

我的公众号[悬空八只脚](React Native开发鸿蒙Next---react-native-cameraroll在ArkTS下的接入报错)

作者:悬空八只脚

链接:https://juejin.cn/post/7453852633955450932

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Logo

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

更多推荐