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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:53:24