uni-app 安卓10上传不了图片 targetSdkVersion>=29以上
uni-app 安卓10上传不了图片 targetSdkVersion>=29以上
操作步骤:
- 使用VantUI上传图片组件
预期结果:
- 使用VantUI上传图片组件
实际结果:
- 使用VantUI上传图片组件造成安卓10选中图片上传不了
bug描述:
安卓10上传不了图片,能进入相册,但是选中图片无效
说是修改androidmanifest.xml文件,在<application>标签里再添加一个属性android:requestLegacyExternalStorage="true",就行。但是云打包不支持加该属性。把targetSdkVersion设置为29以下的确可以。
更多关于uni-app 安卓10上传不了图片 targetSdkVersion>=29以上的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 安卓10上传不了图片 targetSdkVersion>=29以上的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题是由于Android 10(API 29)引入的存储权限策略变更(Scoped Storage)导致的。当targetSdkVersion设置为29及以上时,应用默认无法直接通过文件路径访问外部存储中的文件,包括相册中的图片。
核心原因:
Android 10及以上版本限制了应用对外部存储的访问权限,除非应用声明了requestLegacyExternalStorage属性或使用新的存储访问API(如MediaStore)。云打包时,HBuilderX默认生成的配置可能未包含此属性,导致上传组件无法获取到选中的图片文件。
解决方案:
-
临时方案(不推荐长期使用):
- 将
targetSdkVersion降级到28或以下(如你所述),但这不符合Google Play上架要求,且未来可能被强制要求升级。
- 将
-
推荐方案(适配Android 10+):
- 使用uni-app的API进行文件选择,而非依赖UI组件的原生路径。例如:
uni.chooseImage({ count: 1, success: (res) => { const tempFilePaths = res.tempFilePaths; // 使用tempFilePaths上传(uni.uploadFile) } });uni.chooseImage已适配Scoped Storage,返回的临时路径可安全用于上传。
- 使用uni-app的API进行文件选择,而非依赖UI组件的原生路径。例如:
-
原生配置适配(如需自定义原生逻辑):
- 若必须修改原生配置,可在HBuilderX项目的
manifest.json中配置:"app-plus": { "distribute": { "android": { "targetSdkVersion": 29, "permissionExternalStorage": { "request": "always" } } } }
- 若必须修改原生配置,可在HBuilderX项目的

