You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo 47+Dev-Client下用expo-sharing分享Assets图片遇参数类型兼容错误

Expo 47 自定义Dev-Client下expo-sharing分享本地图片报错解决

问题背景

使用Expo 47搭配自定义Dev-Client(Android平台),已确认客户端包含所需依赖库,尝试通过expo-sharing分享本地Assets中的图片时触发错误。

示例代码:

import * as Sharing from 'expo-sharing'

async function shareImage(imageURI) {
    try {
        await Sharing.shareAsync(require('../../../assets/images/motivational/36.jpg'))
    } catch (error) {
        console.log(error)
    }
}

报错信息:

[Error: Argument of an incompatible class: class java.lang.Double cannot be passed as an argument to parameter expecting class java.lang.String.]

错误含义

require()加载Expo本地Asset时,返回的是Android平台的资源ID(数字类型,对应Java中的Double),但Sharing.shareAsync()方法要求传入字符串格式的文件URI,类型不匹配导致了这个错误。

解决方法

需要借助expo-asset库将本地Asset转换为可访问的文件URI,步骤如下:

  1. 确保已安装expo-asset(Expo 47默认包含,若未安装可执行npx expo install expo-asset)
  2. 修改代码,先加载Asset并获取其本地URI,再传入分享方法:

修改后的代码:

import * as Sharing from 'expo-sharing'
import { Asset } from 'expo-asset'

async function shareImage() {
    try {
        // 加载Asset资源
        const asset = Asset.fromModule(require('../../../assets/images/motivational/36.jpg'))
        await asset.downloadAsync()
        
        // 使用Asset的localUri进行分享
        await Sharing.shareAsync(asset.localUri)
    } catch (error) {
        console.log(error)
    }
}

说明

  • Asset.fromModule()将require返回的资源ID转换为Asset对象
  • downloadAsync()确保Asset已下载到本地,获取到有效的localUri
  • asset.localUri是字符串格式的本地文件路径,符合shareAsync()的参数要求

内容的提问来源于stack exchange,提问作者GOXR3PLUS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:15:45