Flutter指定Flavor构建APK首次报错,二次构建成功问题求助
Flutter多环境(Flavor)构建首次报错二次成功的解决方案
我在Flutter应用中配置了Flavor,执行命令flutter build apk --release --flavor development -t lib/main_dev.dart构建APK时,首次执行会报错,但第二次执行就能成功生成APK。
错误详情
Execution failed for task ':app:mergeDevelopmentReleaseResources'. > java.lang.IllegalArgumentException: Unable to locate resourceFile (/flutter_app/build/app/intermediates/merged-not-compiled-resources/development/release/drawable/abc_dialog_material_background.xml) in source-sets.
当前app/build.gradle配置
Flavor与sourceSets配置
sourceSets { customer { res.srcDirs = ['src/customer/res'] } staging { res.srcDirs = ['src/staging/res'] } development { res.srcDirs = ['src/development/res'] } } flavorDimensions "app" productFlavors { customer { dimension "app" applicationId "com.example.app" versionCode 1 versionName "1.0" } staging { dimension "app" applicationId "com.example.app" versionCode 1 versionName "1.0" } development { dimension "app" applicationId "com.example.app" versionCode 1 versionName "1.0" } }
默认配置
defaultConfig { applicationId "com.example.app" minSdkVersion 21 targetSdkVersion 33 versionCode 1 versionName "1.0.0" }
解决方法
这个问题源于Gradle资源合并阶段的路径配置或缓存异常,可尝试以下方案:
修改sourceSets,保留默认资源路径
当前配置覆盖了默认资源目录,导致系统找不到AndroidX的默认资源。需在每个Flavor的res.srcDirs中添加src/main/res:sourceSets { customer { res.srcDirs = ['src/main/res', 'src/customer/res'] } staging { res.srcDirs = ['src/main/res', 'src/staging/res'] } development { res.srcDirs = ['src/main/res', 'src/development/res'] } }这样Gradle会同时加载默认资源和对应Flavor的自定义资源,避免缺失系统默认文件。
清理构建缓存后重新构建
首次构建失败可能是缓存异常导致,执行以下命令:flutter clean flutter build apk --release --flavor development -t lib/main_dev.dart规范Flavor资源目录结构
确保每个Flavor的src/{flavor}/res目录符合Android规范,即使没有自定义资源,也建议创建drawable、values等空子目录,避免Gradle解析路径出错。升级Gradle插件版本
旧版Gradle插件可能存在多Flavor资源合并bug,可升级android/build.gradle中的插件版本:dependencies { classpath 'com.android.tools.build:gradle:7.4.2' // 替换为更高稳定版本 // 其他依赖项 }
内容的提问来源于stack exchange,提问作者ASAD HAMEED
相关产品推荐
相关产品推荐

