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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:43:12