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创建的代码,可能需要手动调整(能通过命令调整吗?如有知道的不吝赐教)。
更多内容可关注
我的公众号悬空八只脚