Flutter应用遇“Unknown Kotlin JVM target:21”错误,求Gradle权限最优配置
解决方案:photo_manager编译错误修复+权限Gradle配置
一、修复Kotlin JVM Target编译错误
你遇到的Unknown Kotlin JVM target: 21错误,是因为photo_manager依赖要求的JVM目标版本超出了你当前Gradle环境的支持范围。按以下步骤解决:
- 打开项目根目录的
android/build.gradle,将ext.kotlin_version升级到1.9.0及以上(Kotlin 1.9开始支持JVM 21):ext.kotlin_version = '1.9.20' - 同步Gradle后重新编译。如果仍报错,在
android/app/build.gradle的android块中强制指定兼容的JVM目标版本:android { // 其他配置 kotlinOptions { jvmTarget = '17' // 选你环境支持的最高稳定版本,比如17 } }
二、权限获取的Gradle最优配置
针对相册媒体权限,按Android版本分场景配置:
1. 基础权限适配(兼容多版本)
在android/app/build.gradle的defaultConfig中添加manifest占位符,统一管理权限声明:
defaultConfig { // 其他配置 manifestPlaceholders = [ 'read_media_permission': 'android.permission.READ_MEDIA_IMAGES', 'legacy_storage_permission': 'android.permission.READ_EXTERNAL_STORAGE' ] }
2. Android 13+(SDK 33+)适配
确保编译和目标SDK版本对应,在android/app/build.gradle中配置:
android { compileSdkVersion 34 // 至少33,推荐最新稳定版 defaultConfig { targetSdkVersion 34 } // 可选:引入Jetpack权限库简化动态权限处理 dependencies { implementation 'androidx.core:core-ktx:1.12.0' } }
3. Android 10-12 Scoped Storage适配
如果需要兼容这些版本,在defaultConfig中添加旧存储模式声明:
defaultConfig { // 其他配置 manifestPlaceholders += [ "android:requestLegacyExternalStorage": "true" ] }
注意:Android 13+无需此配置。
4. 调试阶段权限优化
在buildTypes.debug中添加调试专属配置,加快权限测试:
buildTypes { debug { manifestPlaceholders += [ 'debug_mode_permission': 'true' ] } }
总结
先解决Kotlin版本和JVM目标的编译问题,再根据项目目标SDK版本配置对应权限的Gradle选项,确保编译通过且权限请求符合Android各版本规范。
内容的提问来源于stack exchange,提问作者Blackmoon
相关产品推荐
相关产品推荐

