Flutter:Gradle 构建未能生成 .apk 文件。很可能这个文件是在<app_root>\build下生成的,但是工具找不到它

Flutter: Gradle build failed to produce an .apk file. It's likely that this file was generated under <app_root>\build, but the tool couldn't find it

我正在尝试试驾一个应用程序。由于应用程序无法 debug/run,我一直遇到这个问题的奇怪问题。 SDK版本为28,其余版本如下:

Flutter 1.13.9-pre.79 • channel master • https://github.com/flutter/flutter.git
Framework • revision 9eb9ea0ffa (6 hours ago) • 2020-01-13 21:30:42 -0800
Engine • revision 0235a50843
Tools • Dart 2.8.0 (build 2.8.0-dev.0.0 28c335d5a2)

Gradle build failed to produce an .apk file. It's likely that this file was generated under C:\Development\build, but the tool couldn't find it.

有没有办法通过提供或提供 Gradle 的输出路径来解决此问题或允许我 运行 的配置? .apk 似乎生成为错误状态。

更新:

Android Studio -v 3.5.3 
Gradle -v 3.4.2 
Gradle Wrapper -v 5.1.1

就我而言,我有一个像这样的多口味应用程序:

2021 年 4 月 15 日更新:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
            {
                    "name": "YOUR_PROJECT_NAME",
                    "program": "lib/main.dart",
                    "request": "launch",
                    "type": "dart",
                    "args": [
                            "--flavor",
                            "ADD_YOUR_FLAVOR_NAME_HERE" //development or staging or production
                        ]
            }
    ]

另一种方式:

 android {

    ...

    buildTypes {
        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
        }
    }

    flavorDimensions "flavor-type"

    productFlavors{
        development{
            dimension "flavor-type"
        }
        staging{
            dimension "flavor-type"
        }
        production{
            dimension "flavor-type"
        }
    }
}

所以如果你想 运行 应用程序你必须写风味名称,然后 class 包含 main() 函数的名称

flutter run --flavor staging -t lib/main_staging.dart

我解决了错误并构建了 .apk

在 buildTypes 之后的应用级别 build.gradle 文件中添加以下代码:

flavorDimensions "flavor"

productFlavors {
    staging {
        dimension "flavor"
    }
}

并修改您的编辑配置,如下图所示:

在我的例子中,问题是没有为我的 Android API 模块设置模块特定的 SDK。 我找到的解决方案是:

Open Android Studio->File->Project Structure->Project SDK box->set Android API

当您在 build.gradle 文件中提到以下代码时,有时会发生此问题。评论此代码并尝试 运行 构建,它对我来说成功了。如果您想构建多个 apk 文件,请在发布构建时使用它们,并在调试构建时将其删除。从您分享的屏幕截图中,我可以看到为您生成了多个 apk,评论拆分 apk 将帮助您修复它。

splits {
    abi {
        enable true
        reset()
        include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        universalApk true
    }
}

Build name 中添加了来自 Edit Configurations 的口味名称,它成功了!

我不知道它是否对你有帮助,但我按照解决方案 1 解决了我的问题。

解法-1

Replace your project level build.gradle file with following replace the versions and classpath with your own.

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.3' 
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

The Most Important Part: Make sure your are using two subprojects

 rootProject.buildDir = '../build'
 subprojects {
     project.buildDir = "${rootProject.buildDir}/${project.name}"
 }
 subprojects {
     project.evaluationDependsOn(':app')
 }

Source

解法-2

  • 尝试重建您的 android 文件,将 android 文件夹重命名为
    其他可以停用它的东西,例如“android-old”或其他任何东西。

  • 然后,进入项目的父文件夹,运行下面的命令

       flutter create --org your.organization <your appname>
    

这将重建所有丢失的文件。 这对我有用

好的,我发现如果你用vscode

launch.json里面是args

经过一天的努力解决这个问题后,我找到了从哪里开始真正解决它。在我们插入随机代码之前,我们必须搜索它生成的 apk 的确切名称。

Flutter 构建文件夹 -> 应用程序 -> 输出 -> apk

在这里您将看到在发布或调试模式下 apk 名称的确切名称。

在这种情况下,如果名称具有 app-staging.apk 或其他一些奇怪的名称,那么您的 gradle 构建中的某些内容无法正常工作.在我的例子中,这是因为我有一种名字 staging 不需要的味道。

如果您的情况并非如此,那么肯定会始终检查一些 gradle 设置。尝试从发布模式更改为调试模式 或者与 "launch.json" 相反,在这种情况下,您将能够看到一侧和另一侧是否不同,并了解配置差异。

我将以下部分添加到 app/build/gradle 文件中,因为我只需要 arm64-v8a versio apk,

splits {
    abi {
        enable true
        reset()
        include 'arm64-v8a'
        universalApk true
    }
}

然后错误发生了,所以我解决这个问题的解决方法只是将一个名为 symbol-link 的 app-debug.apk 命名为新的 app-arm64 -v8a-debug.apk 文件夹 build/app/outputs/flutter-apk/ 有效!

我通过禁用拆分解决了我的问题

splits {

    abi {

        enable false

    }
}

我发现 build.gradle 中的这些行导致了问题

splits {
abi {
    enable true
    reset()
    include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
    universalApk true
}}

并且还发现我们不需要它来构建拆分 apk 运行

flutter build apk --split-per-abi

这将自动生成 v7、v8a 和 x86_64

确认android/app/build.gradle没有风味相关问题后,请运行命令

flutter run --flavor dev lib/main_dev.dart 

而不是

flutter run lib/main_dev.dart --flavor dev 

就我而言,我根本不在 gradle 文件中添加风味部分。经过几次尝试,最后我通过在根 build.gradle 文件中添加以下代码解决了这个问题:

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
    project.evaluationDependsOn(':app')
}

我发现 build.gradle 中的这些行导致了问题。然后我解决了这个问题set splits abi enable false

splits{
    abi{
        enable false
        reset()
        include "x86", "x86_64", "armeabi", "armeabi-v7a", "arm64-v8a"
        universalApk false
    }
}

要遵循的步骤。

1- cd your_projetc

2- 颤动创建 .

3-终于扑了运行

在子项目部分的根 android 文件夹 build.gradle 的注释后添加图像中的行解决了我的问题

这是要添加的行:

project.buildDir = "${rootProject.buildDir}/${project.name}"