Flutter多Flavor构建后APK启动路径不匹配问题求助
解决Flutter多Flavor构建后启动路径不匹配问题
我开发的Flutter项目包含dev和prod两个Flavor,APK已成功构建到对应Flavor的目录,但启动时系统会去非Flavor专属路径查找APK,导致启动失败。
错误信息
✓ Built build/host/outputs/apk/dev/debug/app-dev-debug.apk. "build/host/outputs/apk/debug/app-dev-debug.apk" does not exist. Error launching application on sdk gphone64 x86 64.
我的配置
build.gradle配置:
def flutterPluginVersion = 'managed' apply plugin: 'com.android.application' android { // Conditional for compatibility with AGP <4.2. if (project.android.hasProperty("namespace")) { namespace "com.******.host" } compileSdk 34 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { applicationId "com.******.host" minSdkVersion 23 targetSdkVersion 33 versionCode 1 versionName "1.0" } flavorDimensions "app" productFlavors { dev { dimension "app" applicationId "com.******.host" minSdkVersion 23 targetSdkVersion 33 versionCode 1 versionName "1.0" } prod { dimension "app" applicationId "com.******.host" minSdkVersion 23 targetSdkVersion 33 versionCode 1 versionName "1.0" } } buildTypes { profile { initWith debug } release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } } buildDir = new File(rootProject.projectDir, "../build/host") dependencies { implementation project(':flutter') implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' }
运行命令
flutter run --flavor dev -t lib/dev_application.dartflutter run --flavor prod -t lib/prod_application.dart
已尝试的命令
flutter run --flavor dev --debug -t lib/dev_application.dartflutter run --flavor prod --debug -t lib/prod_application.dart
解决方案
1. 排查自定义buildDir的影响
你手动修改了buildDir到../build/host,这会干扰Flutter默认的路径检测逻辑。先注释掉buildDir = new File(rootProject.projectDir, "../build/host")这一行,使用默认build目录测试,看是否能正常找到APK。如果恢复正常,再考虑调整自定义输出目录的配置方式。
2. 显式指定APK路径启动
若需要保留自定义buildDir,可直接指定APK完整路径绕开路径检测:
flutter install --flavor dev --apk build/host/outputs/apk/dev/debug/app-dev-debug.apk && flutter run --flavor dev -t lib/dev_application.dart
或用adb直接安装启动:
adb install build/host/outputs/apk/dev/debug/app-dev-debug.apk adb shell am start -n com.******.host/com.******.host.MainActivity
3. 规范Android构建输出路径配置
替代直接修改buildDir,在android块内通过variant配置统一输出路径,让Flutter能正确识别:
android { // 其他原有配置... applicationVariants.all { variant -> variant.outputs.each { output -> def flavorName = variant.flavorName def buildType = variant.buildType.name output.outputFileName = "app-${flavorName}-${buildType}.apk" // 自定义输出目录 def outputDir = new File(rootProject.projectDir, "../build/host/outputs/apk/${flavorName}/${buildType}") output.outputDirectory = outputDir } } }
之后移除单独的buildDir = ...行,确保输出路径与Flutter预期对齐。
4. 清理缓存后重新构建
缓存可能导致路径识别异常,执行以下命令清理后重试:
flutter clean flutter pub get flutter run --flavor dev -t lib/dev_application.dart
内容的提问来源于stack exchange,提问作者Burak Dümer
相关产品推荐
相关产品推荐

