适配Android 14(API 34):老旧Flutter项目快速构建方法咨询
适配Flutter老旧项目到targetSdkVersion 34的快速构建方案
一、M1 Mac Java版本适配
- 安装Java 11(适配AGP 7.0+的最低要求):
brew install temurin11 - 用
jenv快速切换项目专属Java版本:- 安装jenv:
brew install jenv - 添加Java 11到jenv:
jenv add /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home - 进入项目根目录执行:
jenv local 11
- 安装jenv:
- 验证:执行
java -version确认输出为11.x版本
二、Android核心配置最小改动
修改
android/app/build.gradle:- 将
targetSdkVersion和compileSdkVersion统一改为34 - 打开
android/build.gradle,把com.android.tools.build:gradle版本锁定为7.0.4(兼容旧Flutter且支持targetSdk34的稳定版) - 调整Gradle wrapper版本:打开
android/gradle/wrapper/gradle-wrapper.properties,将distributionUrl改为https\://services.gradle.org/distributions/gradle-7.0.2-all.zip(AGP 7.0对应配套版本)
- 将
适配targetSdk34权限变更:
- 在
AndroidManifest.xml中,用android.permission.READ_MEDIA_IMAGES、android.permission.READ_MEDIA_VIDEO替代旧的READ_EXTERNAL_STORAGE - 涉及前台服务的项目,添加
android.permission.POST_NOTIFICATIONS权限
- 在
三、依赖缺失问题修复(以video_player为例)
- 打开
pubspec.yaml,将video_player版本锁定为2.4.10(兼容旧Flutter与targetSdk34的稳定版本,无需升级到最新版) - 执行缓存清理命令:
flutter clean && rm -rf android/.gradle && flutter pub get - 检查自定义代码中是否存在旧API调用(如
Environment.getExternalStorageDirectory()),替换为Context.getExternalFilesDir(null)
四、M1 Mac编译优化配置
在android/gradle.properties中添加以下配置,解决架构兼容与内存问题:
android.useAndroidX=true android.enableJetifier=true org.gradle.jvmargs=-Xmx2048M android.nonTransitiveRClass=false android.bundle.enableUncompressedNativeLibs=false
- 先测试debug构建:
flutter build apk --debug,无报错后打release包:flutter build apk --release
批量处理多项目技巧
- 将上述修改后的
build.gradle、gradle-wrapper.properties、gradle.properties做成模板,直接替换四个项目的对应文件 - 统一使用Flutter 2.10.5版本(2022年稳定版,兼容旧项目且支持targetSdk34)
内容的提问来源于stack exchange,提问作者David Kiss
相关产品推荐
相关产品推荐

