Flutter ImagePicker 错误“找不到属性 android:requestLegacyExternalStorage”

Posted

技术标签:

【中文标题】Flutter ImagePicker 错误“找不到属性 android:requestLegacyExternalStorage”【英文标题】:Flutter ImagePicker error "attribute android:requestLegacyExternalStorage not found" 【发布时间】:2020-12-21 04:27:51 【问题描述】:

我在我的颤振项目中使用image_picker。它说“API 将 android:requestLegacyExternalStorage="true" 作为属性添加到 AndroidManifest.xml 中的标记。在针对 Android Q 的应用上,该属性默认为 false。”

build.gradle 中,在android 下有compileSdkVersion 28,在defaultConfig 下有minSdkVersion 16targetSdkVersion 28。我对此并不熟悉,但我认为这些符合API<29 条件。所以我添加了属性。

然后我的项目将不再编译,并出现错误提示“AAPT:错误:属性 android:requestLegacyExternalStorage 未找到。”如果我删除android:requestLegacyExternalStorage="true",它将编译。但是,由于它特别要求添加此属性,因此我想弄清楚这一点以避免任何潜在问题,例如在 ios 上因权限相关问题而被拒绝。

添加属性后,我的AndroidManifest.xml 看起来像:

我该怎么办?谢谢!

【问题讨论】:

"如果我删除 android:requestLegacyExternalStorage="true"" 就可以编译了,这意味着没有问题了吗? 是的,但它特别要求添加此属性。我想避免任何潜在问题,例如在 iOS 上因权限相关问题而被拒绝。 我猜它不会影响IOS,因为你添加了AndroidManifest.xml。或许用IOS设备测试? 我的意思是避免出现类似于 iOS 上 App Store 被拒绝的问题。如果我不添加此属性,不确定谷歌会做什么。 将 android:requestLegacyExternalStorage="true" 添加到清单文件仅对 sdk 版本 29 有意义。对于运行 Android Q/10 的设备。那个文档是错误的。 【参考方案1】:

要解决这个问题,在“build.gradle (Project)”中,将“compileSdkVersion”、“buildToolsVersion”和“targetSdkVersion”设置为 29,如下所示:

buildToolsVersion = “29.0.0”
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29
supportLibVersion = “28.0.0” 

【讨论】:

整个android文件夹中不存在buildToolsVersion

以上是关于Flutter ImagePicker 错误“找不到属性 android:requestLegacyExternalStorage”的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 ImagePicker Flutter 分配文件

Flutter imagepicker.pickvideo 返回 jpg

Flutter & Navigator & ImagePicker : 为啥我可以进入下一页?查找已停用小部件的祖先是不安全的

Flutter Resize ImagePicker Image 在上传到firebase之前

在 Flutter 中使用 Image Picker 获取 .png 文件是不是有误?

Flutter学习日记之使用ImagePicker实现选择媒体文件/拍摄以及文件上传