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

时间:2020-01-14 11:28:12

标签: android gradle flutter dart apk

我正在尝试测试应用程序。由于应用无法调试/运行,我一直对此问题感到陌生。 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)

enter image description here

Gradle构建无法生成.apk文件。这很可能是 文件是在C:\ Development \\ build下生成的,但是该工具 找不到它。

是否可以通过提供或提供Gradle的输出路径来传递此问题或配置,从而使我能够运行? .apk似乎是由于错误状态而生成的。

enter image description here

更新:

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

11 个答案:

答案 0 :(得分:20)

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

 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"
        }
    }
}

因此,如果要运行应用程序,则必须先编写风味名称,然后再编写包含main()函数的类名称

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

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

答案 1 :(得分:5)

在buildTypes之后在App标签build.gradle文件中添加以下代码:

flavorDimensions "flavor"

productFlavors {
    staging {
        dimension "flavor"
    }
}

并修改您的“编辑配置”,如下图所示: enter image description here

答案 2 :(得分:3)

好吧,如果您使用args,我发现它是launch.json中的vscode

enter image description here

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

Build name Edit Configurations 中添加了风味名称,它可以正常工作! enter image description here

答案 5 :(得分:1)

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

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

然后发生错误,因此我的解决方法仅是将名为app-debug.apk的符号链接更改为新的名为 app-arm64-v8a-debug.apk 的符号链接在文件夹 build / app / outputs / flutter-apk / 中 它有效!

答案 6 :(得分:0)

就我而言,问题是未为我的Android API模块设置特定于模块的SDK。 我找到的解决方案是:

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

答案 7 :(得分:0)

我不知道它是否会为您提供帮助,但我通过遵循解决方案1解决了我的问题。

解决方案1 ​​

用以下替换替换项目级别的build.gradle文件 使用自己的版本和类路径。

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
}

最重要的部分: 确保您正在使用两个子项目

 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>
    

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

答案 8 :(得分:0)

经过一天的努力,我终于找到了真正解决该问题的方法。在插入随机代码之前,我们必须搜索生成的apk的确切名称。

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

在这里,您将确切地知道apk名称是处于发布还是调试模式。

在这种情况下,如果该名称具有app-staging.apk或其他一些怪异的名称,则您的gradle版本中的某些内容将无法正常运行。就我而言,这是因为我拥有名称阶段不需要的味道。

如果您的情况并非如此,那么肯定会一直是需要检查的设置。尝试从发行版更改为调试模式 或“ launch.json” 的反义词,在这种情况下,您将能够查看一侧是否另一侧并了解配置差异。

答案 9 :(得分:0)

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

splits {

    abi {

        enable false

    }
}

答案 10 :(得分:0)

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

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

并且还发现我们不需要它,来构建split apk run

flutter build apk --split-per-abi

这将自动生成 v7、v8a 和 x86_64